Download and Setup
1. download the latest hbase-0.19.3 release from http://hadoop.apache.org/hbase/
2. tar zxvf hbase-0.19.3.tar.gz -C /home/gembin/hbase-dev (i.e.)
3. set env variable HBASE_HOME
$vi /etc/profile
#set hbase env
HBASE_HOME=/home/gembin/hbase-dev/hbase-0.19.3
PATH=$HBASE_HOME/bin:$PATH
export HBASE_HOME PATH
$source /etc/profile
4. modify $HBAE_HOME/conf/hbase-env.sh, set the right JAVA_HOME.
i.e. export JAVA_HOME=/home/gembin/jdk1.6.0_14
5. modify $HBAE_HOME/conf/hbase-default.xml, set the our own hbase.rootdir instead of using the default tmp dir (this is optional step)
1 <property>
2 <name>hbase.rootdir</name>
3 <value>file:///home/gembin/hbase-dev/hbase-0.19.3/hbase_root</value>
4 <description>The directory shared by region servers.</description>
5 </property>
6. ok, now it's time to start hbase
$cd $HBASE_HOME
$bin/start-hbase.sh
starting master, logging to /home/gembin/hbase-dev/hbase-0.19.3/bin/../logs/hbase-gembin-master-gembin.fedora11.out
root@localhost's password:
localhost: starting regionserver, logging to /home/gembin/hbase-dev/hbase-0.19.3/bin/../logs/hbase-root-regionserver-gembin.fedora11.out
you can check the logs in $HBASE_HOME/logs
7. start hbase shell by:
$bin/hbase shell
hbase(main):001:0> help
enter help to check the commands of hbase shell
Create Table and Put Data
1. create a table 'blog' with family 'entry' by using: (These families are “static” like the columns in the RDBMS world.)
hbase(main):004:0> create 'blog','entry'
0 row(s) in 6.0543 seconds
2. describe table 'blog'
hbase(main):005:0> describe 'blog'
{NAME => 'blog', FAMILIES => [{NAME => 'entry', COMPRESSION => 'NONE', VERSIONS => '3', LENGTH => '2147483647', TTL => '-1',
IN_MEMORY => 'false', BLOCKCACHE => 'false'}]}
3. insert some data to table
hbase(main):006:0> put 'blog','entry1','entry:title','first post'
hbase(main):007:0> put 'blog','entry1','entry:author','gembin'
hbase(main):008:0> put 'blog','entry1','entry:content','welcome to hbase world'
4.query the table
hbase(main):009:0> get 'blog','entry1'
COLUMN CELL
entry:author timestamp=1250344106859, value=gembin
entry:content timestamp=1250344149651, value=welcome to hbase world
entry:title timestamp=1250343923204, value=first post
5. list tables in the hbase by using:
hbase(main):010:0> list
blog
6. enable or disable a table by using:
hbase(main):011:0> disable 'blog'
09/08/15 21:56:20 INFO client.HBaseAdmin: Disabled blog
hbase(main):012:0> enable 'blog'
09/08/15 21:57:03 INFO client.HBaseAdmin: Enabled table blog
7. drop a table (NOTE: before drop a table, you must first disable a table)
hbase(main):013:0> drop 'blog'
09/08/15 22:09:10 INFO client.HBaseAdmin: Deleted blog
Play Hbase with java code
package org.hbase.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.io.BatchUpdate;
import org.apache.hadoop.hbase.io.RowResult;
public class HBaseTester implements HConstants{
public static final String TABLE_BLOG="blog";
public static HTable table;
static{
try {
table=new HTable(new HBaseConfiguration(),TABLE_BLOG);
} catch (IOException e) {
e.printStackTrace();
}
}
public static Map<String,String> getEntry(String entryId) throws IOException {
Map<String,String> post = new HashMap<String,String>();
RowResult result = table.getRow(entryId);
if(result==null){
System.out.println("not data");
return null;
}
for (byte[] column : result.keySet()) {
String theColumn=new String(column);
String theValue=new String(result.get(column).getValue());
//System.out.println("{"+theColumn+","+theValue+"}");
post.put(theColumn,theValue);
}
return post;
}
public static void main(String[] args) throws Exception {
Map<String,String>entry = getEntry("entry1");
System.out.println(entry.get("entry:title"));
}
}
1. create table
static HBaseAdmin admin = null;
static {
try {
HBaseConfiguration conf = new HBaseConfiguration();
admin = new HBaseAdmin(conf);
} catch (MasterNotRunningException e) {
e.printStackTrace();
}
}
public static void creatTable(String tableName,HColumnDescriptor[]columnDescriptors) {
try {
if (!admin.tableExists(tableName)) {
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
for(HColumnDescriptor column:columnDescriptors){
tableDescriptor.addFamily(column);
}
admin.createTable(tableDescriptor);
System.out.println("table create ok!!!");
} else {
System.out.println("table Already exists");
}
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
HColumnDescriptor[]cols=new HColumnDescriptor[]{
new HColumnDescriptor("title:"),
new HColumnDescriptor("author:"),
new HColumnDescriptor("content:")
};
createTable('"blog",cols)
2.List tables
public static void listTables() {
try {
HTableDescriptor[] ts= admin.listTables();
if(ts==null)return;
for (int i = 0; i < ts.length; i++) {
HTableDescriptor tableDescriptor=ts[i];
System.out.println(tableDescriptor);
}
} catch (IOException e) {
e.printStackTrace();
}
}
3. insert data to 'blog' table
public static void insertData(){
try {
HTable table = new HTable(new HBaseConfiguration(),"blog");
table.setAutoFlush(false);
table.setWriteBufferSize(10);
ArrayList<BatchUpdate> rowsUpdate = new ArrayList<BatchUpdate>();
BatchUpdate batchUpdate = new BatchUpdate("entry1");
batchUpdate.put("entry:author", "gembin".getBytes());
batchUpdate.put("entry:content", "hbase is great".getBytes());
batchUpdate.put("entry:title", "try hbase".getBytes());
rowsUpdate.add(batchUpdate);
table.commit(rowsUpdate);
table.flushCommits();
} catch (IOException e) {
e.printStackTrace();
}
}
4. List data of table
public static void listData(){
try {
HTable table=new HTable(new HBaseConfiguration(),"blog");
Scanner scanner=table.getScanner(new String[]{"entry:"});
Iterator<RowResult> it=scanner.iterator();
while(it.hasNext()){
RowResult rowResult=it.next();
System.out.println("------"+new String(rowResult.getRow())+"--------");//row name
for (Map.Entry<byte[], Cell> e: rowResult.entrySet()) {
String column=new String(e.getKey());
Cell cell = e.getValue();
System.out.println(column+", "+new String(cell.getValue()));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
enjoy it!!!
next entry, ORM with HBase: http://www.blogjava.net/gembin/archive/2009/08/17/291576.html