Hbase 使用客户端API [底层API] (三)
Hbase数据库名字空间(namesppace)
-
ns
在逻辑上对表进行分组,有两个内置表空间,hbase和default.
Hbase create table
Configuration config = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(config);
TableName tableName = TableName.valueOf("test");
HTableDescriptor htd = new HTableDescriptor(tableName);
HColumnDescriptor hcd = new HColumnDescriptor("data");
htd.addFamily(hcd); //添加列族
admin.createTable(htd); //创建表
Hbase get
HTable table = new HTable(config, tableName);
//... where rowkey=xxx and label=x:xxx
//必须指定rowkey ==> getById
Get get = new Get(Bytes.toBytes("row1")); //指定rowkey
get.addColumn();
get.addFamily();
Result r = table.get(get);
r.getValue(); //当前版本
List<KeyValue> r.getColumn(); //所有版本
Hbase put
HTable table = ... ;
Put put = new Put( row ); //指定rowkey
put.add(family,column,value); //列族,列,value
put.add(family,column,version,value); //显式指定版本号 table.put(put);
Hbase Scan
Scan scan = new Scan(); //创建扫描对象,定制扫描条件
scan.addColumn()
scan.setStartRow() //起始key
scvan.setStopRow() //结束key
//每次批量提取100条记录,耗尽时再次提取100
ResultScanner scanner = table.getScanner(scan);//cursor|iterator
for(Result r : scanner){...}
scanner.close();
Hbase delete
Delete del = new Delete(); //rowkey
del.addColumn()
del.addFamily()
htable.delete(del);
Hbase drop table
admin.disableTable(...);
admin.deleteTable(...);
table.close();
admin.close();
Hbase join
-
HBase不支持连接操作
-
可以在应用层实现
- 组合scan() + get()间接实现
Hbase alter schema
Configuration conf = ...;
HBaseAdmin admin = ...;
//
admin.disableTable(t);
//
HColumnDesc hcd = ...
admin.addColumn(table,coldesc);
admin.modifyColumn(table,colDesc);
//
admin.enableTable(t);
Hbase Log操作
运行hbase程序
-
$>export HBASE_CLASSPATH=xxx.jar
-
$>hbase ClassName
//格式如下:rowname/col name/celltimestamp/celltype/cell length/internal Hb field
Get: keyvalues={row1/data:1/1414932826551/Put/vlen=6/mvcc=0}
Scan: keyvalues={row1/data:1/1414932826551/Put/vlen=6/mvcc=0}
Scan: keyvalues={row2/data:2/1414932826564/Put/vlen=6/mvcc=0}
Scan: keyvalues={row3/data:3/1414932826566/Put/vlen=6/mvcc=0}