HBase之Java API 博客分类: 技术总结NOSql HBaseJavaAPI
Java API应用
-
Configuration
在使用Java API时,Client端需要知道HBase的配置环境,如存储地址,zookeeper等信息。这些信息通过Configuration对象来封装,可通过如下代码构建该对象:
Configuration config=HBaseConfiguration.create();
在调用HBaseConfiguration.create()方法时,HBase首先会在classpath下查找hbase-site.xml文件,将里面的信息解析出来封装到Configuration对象中,如果hbase-site.xml文件不存在,则使用默认的hbase-core.xml文件。
除了将hbase-site.xml放到classpath下,开发人员还可通过config.set(name, value)方法来手工构建Configuration对象:
Configuration.set(String name, String value);
-
HBaseAdmin
HBaseAdmin用于创建数据库表格,并管理表格的元数据信息,通过如下方法构建:
HBaseAdmin admin=new HBaseAdmin(config);
常用方法如列表所示:
Table 1. HBaseAdmin常用方法
方法名 方法描述 addColumn(tableName,column) 为表格添加栏位 deleteColumn(tableName,column) 删除指定栏位 balanceSwitch(boolean) 是否启用负载均衡 createTable(HTableDescriptor desc) 创建表格 deleteTable(tableName) 删除表格 tableExists(tableName) 判断表格是否存在
-
HTable
在HBase中,HTable封装表格对象,对表格的增删改查操作主要通过它来完成,构造方法如下:
HTable table=new HTable(config,tableName);
在构建多个HTable对象时,HBase推荐所有的HTable使用同一个Configuration。这样,HTable之间便可共享HConnection对象、zookeeper信息以及Region地址的缓存信息。
Example 3. Put操作
Put put=new Put(rowKey); put.add(columnFamily,column,value); table.put(put); 注:在HBase中,实体的新增和更新都是通过Put操作来实现。
Example 5. Scan操作
Scan scan=new Scan( ); scan.addColumn(columnFamily,column); scan.setReversed(false); scan.setBatch(10); scan.setIsolationLevel(IsolationLevel.READ_COMMITTED); scan.setRaw(false); scan.setSmall(true); SingleColumnValueFilter filter=new SingleColumnValueFilter( columnFamily,column, CompareOp.EQUAL,value ); scan.setFilter(filter); ResultScanner scanner=table.getScanner(scan); Iterator<Result> res=scanner.iterator( );
注:更多的过滤器信息请查看org.apache.hadoop.hbase.filter包。
Example 6. 遍历Result结果集
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> maps = res.getMap(); for(byte[] family:maps.keySet()){ System.out.println("columnFamily:"+new String(family)); for(byte[] column:maps.get(family).keySet()){ System.out.print("column:"+new String(column)+"; "); for(Long time:maps.get(family).get(column).keySet()){ System.out.println("value:"+new String(maps.get(family).get(column).get(time))); } } }