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 getFamilies() 返回表中所有的列族的名字
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 get(byte[] family, byte[] qualifier) 获取列族和列限定符指定的列中的所有单元格
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操作后的查询结果,并以的格式存储在map结构中。该类不是线程安全的。

Result的主要方法见下表。

方法 说明
boolean containColumn(byte[] family, byte[] qualifier) 检查是否包含列族和列限定符指定的列
List getColumnCells(byte[] family, byte[] qualifier) 获得列族和列限定符指定的列中的所有单元格
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错误

《Flink原理深入与编程实战》