HBase常用Java API介绍
HBase本身是基于Java开发的,因此,也提供了一整套的Java API开发接口,整个接口方法非常完善,包括命名空间管理、表级管理、列族级管理、数据(增删改查、导入、导出)、集群调度、状态监测、集群优化等。
本章介绍与HBase数据存储管理相关的Java API,主要包括HBaseConfiguration、HableDescriptor、HColumnDescriptor、Put、Get、ResultScanner、Result、Scan等。
首先了解HBase常用的Java API。
org.apache.hadoop.hbase.client.Admin
Admin为Java接口类型,不可以直接用该接口实例化一个对象,而是必须调用Connection.getAdmin()方法,返回一个Admin的子对象,然后用这个Admin接口来操作返回的子对象方法。
该接口用于管理HBase数据库的表信息,包括创建或删除表、列出表项、使表有效或无效、添加或删除表的列族成员、检查HBase的运行状态等。
主要方法见下表:
| 方法 | 说明 | 
|---|---|
| void addColumn(TableName tableName,HColumnDescriptor columnFamily) | 向一个已存在的表添加列 | 
| void closeRegion(byte[] regionName,String sserverName) | 关闭Region | 
| void createTable(HTableDescriptor desc) | 创建表 | 
| void deleteTable(TableName tableName) | 删除表 | 
| void disableTable(TableName tableName) | 使表无效 | 
| void enableTable(TableName tableName) | 使表有效 | 
| boolean tableExists(TableName tableName) | 检查表是否存在 | 
| HTableDescriptor listTables() | 列出所有的表项 | 
| void abort(String why, Throwable e) | 终止服务器或客户端 | 
| boolean balancer() | 调用balancer进行负载均衡 | 
org.apache.hadoop.hbase.HBaseConfiguration
该类用于管理HBase的配置信息,其主要方法见下表。
| 方法 | 说明 | 
|---|---|
| static Configuration create() | 使用默认的HBase配置文件创建Configuration | 
| static Configuration addHBaseResource(Configuration conf) | 向当前Configuration添加参数conf中的配置信息 | 
| static void merge(Configuration destConf,Configuration srcConf) | 合并两个Configuration | 
org.apache.hadoop.hbase.client.Table
Table是Java接口类型,不可以用Table接口直接实例化一个对象,而是必须调用Connection.getTable()方法返回Table的一个子对象,然后再调用返回的子对象的成员方法。
这个接口用于与HBase进行通信。如果多个线程对一个Table接口子对象进行put或者delete操作的话,则写缓冲器可能会崩溃。因此,在多线程环境下,建议使用HTablePool。
Table接口的主要该当见下表。
| 方法 | 说明 | 
|---|---|
| void close() | 释放所有资源,根据缓冲区中变化更新Table | 
| void delete(Delete delete) | 删除指定的单元格或行 | 
| boolean exists(Get get) | 检查Get对象指定的列是否存在 | 
| Result get(Get get) | 从指定的行的某些单元格中取出相应的值 | 
| void put(Put put) | 向表中添加值 | 
| ResultScanner getScanner(byte[] family) ResultScanner getScanner(byte[] family,byte[] qualifier) ResultScanner getScanner(Scan scan)  | 
       获得ResultScanner实例 | 
| HTableDescriptor getTableDescriptor() | 获得当前表的HTableDescriptor实例 | 
| TableName getName() | 获得当前表的名字实例 | 
org.apache.hadoop.hbase.HTableDescriptor
HTableDescriptor包含了HBase中表格的详细信息,例如表中的列族、该表的类型(-ROOT-,.META.)、该表是否只读、MemStore的最大空间、Regiion什么时候应该分裂等。
该类的主要方法见下表。
| 方法 | 说明 | 
|---|---|
| HTableDescriptor addFamily(HColumnDescriptor family) | 添加列族 | 
| Collection | 
       返回表中所有的列族的名字 | 
| TableName getTableName() | 返回表的名字实例 | 
| byte[] getValue(byte[] key) | 获得某个属性的值 | 
| HColumnDescriptor removeFamily(byte[] column) | 删除某个列族 | 
| HColumnDescriptor setValue(byte[] key, byte[] value) | 设置属性的值 | 
org.apache.hadoop.hbase.HColumnDescriptor
HColumnDescriptor包含了列族的详细信息,例如列族的版本号、压缩设置等。HColumnDescriptor通常在添加列族或者创建表的时候使用。列族一旦建立就不能被修改,只能通过删除列族,然后再创建新的列族来间接的修改。一旦列族被删除了,该列族包含的数据也随之被删除。
HColumnDescriptor主要的方法见下表。
| 方法 | 说明 | 
|---|---|
| byte[] getName() | 获取列族的名字 | 
| byte[] getValue(byte[] key) | 获得某列单元格的值 | 
| HColumnDescriptor setValue(byte[] key, byte[] value) | 设置某列单元格的值 | 
org.apache.hadoop.hbase.client.Put
用来对单元格执行添加数据操作。Put的主要方法见下表。
| 方法 | 说明 | 
|---|---|
| Put add(byte[] family, byte[] qualifier, byte[] value) | 将指定的列族、列限定符、对应的值添加到Put实例中 | 
| List | 
       获取列族和列限定符指定的列中的所有单元格 | 
| boolean has(byte[] family, byte[] qualifier) | 检查列族和列限定符指定的列是否存在 | 
| boolean has(byte[] family, byte[] qualifier, byte[] value) | 检查列族和列限定符指定的列中是否存在指定的value | 
org.apache.hadoop.hbase.client.Get
用来获取单行的信息。Get的主要方法见下表。
| 方法 | 说明 | 
|---|---|
| Get addColumn(byte[] family, byte[] qualifier) | 根据列族和列限定符获得对应的列 | 
| Get setFilter(Filter filter) | 为获得具体的列,设置相应的过滤器 | 
org.apache.hadoop.hbase.client.Result
用于存放Get或Scan操作后的查询结果,并以
Result的主要方法见下表。
| 方法 | 说明 | 
|---|---|
| boolean containColumn(byte[] family, byte[] qualifier) | 检查是否包含列族和列限定符指定的列 | 
| List | 
       获得列族和列限定符指定的列中的所有单元格 | 
| NavigableMap | 根据列族获得包含列限定符和值的所有行的键值对 | 
| byte[] getValue(byte[] family, byte[] qualifier) | 获得列族和列限定符指定的单元格的最新值 | 
org.apache.hadoop.hbase.client.ResultScanner
客户端获取值的接口。该接口主要的方法见下表。
| 方法 | 说明 | 
|---|---|
| void close() | 关闭scanner并释放资源 | 
| Result next() | 获得下一个Result实例 | 
org.apache.hadoop.hbase.client.Scan
可以利用Scan来限定需要查找的数据,例如限定版本跑不快、起始行号、终止行号、列族、列限定符、返回值的数量的上限等。
该类的主要方法见下表。
| 方法 | 说明 | 
|---|---|
| Scan addFamily(byte[] family) | 限定需要查找的列族 | 
| Scan addColumn(byte[] family, byte[] qualifier) | 限定列族和列限定符指定的列 | 
| Scan setMaxVersions() Scan setMaxVersions(int maxVersions)  | 
       限定最大的版本个数。如果不带任何参数调用此方法,表示了所有的版本。如果不调用此方法,只会取最新的版本 | 
| Scan setTimeRange(long minStamp, long maxStamp) | 限定最大的时间戳和最小的时间戳,只有在此范围内的单元格才能被获取 | 
| Scan setFilter(Filter filter) | 指定Filter来过滤掉不需要的数据 | 
| Scan setStartRow(byte[] startRow) | 限定开始的行,否则从表头开始 | 
| Scan setStopRow(byte[] stopRow) | 限定结束的行(不含此行) | 
| Scan setBatch(int batch) | 限定最多返回的单元格数目。用于防止返回过多的数据,导致OutofMemory错误 |