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错误 |