Hbase是一个分布式的、面向列的开源数据库,HDFS文件操作常有两种方式,一种是命令行方式,即Hbase提供了一套与Linux文件命令类似的命令行工具。另一种是JavaAPI,即利用Hbase的Java库,采用编程的方式操作Hbase数据库。
一、简述
截至到目前 (2019.04),HBase 有两个主要的版本,分别是 1.x 和 2.x ,两个版本的 Java API 有所不同,1.x 中某些方法在 2.x 中被标识为 @deprecated 过时。所以下面关于 API 的样例,我会分别给出 1.x 和 2.x 两个版本。完整的代码见本仓库:
Java API 1.x Examples
Java API 2.x Examples
同时你使用的客户端的版本必须与服务端版本保持一致,如果用 2.x 版本的客户端代码去连接 1.x 版本的服务端,会抛出 NoSuchColumnFamilyException 等异常。
HBase本身是基于Java开发的,因此,也提供了一整套的Java API开发接口,整个接口方法非常完善,包括命名空间管理、表级管理、列族级管理、数据(增删改查、导入、导出)、集群调度、状态监测、集群优化等。
二、Java API 1.x 基本使用
1 新建Maven工程,导入项目依赖
新建项目后在pom.xml中添加依赖:
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.2</version>
</dependency>
2.主要的Hbase API类和数据模型之间的的对应的关系
1 Admin
org.apache.hadoop.hbase.client.Admin
说明:
Admin为Java接口类型,不可以直接用该接口实例化一个对象,而是必须调用Connection.getAdmin()方法,返回一个Admin的子对象,然后用这个Admin接口来操作返回的子对象方法。
该接口用于管理 HBase 数据库的表信息,包括创建或删除表、列出表项、使表有效或无效、添加或删除表的列族成员、检查 HBase 的运行状态等。
2 HBaseConfiguration
org.apache.hadoop.hbase.HBaseConfiguration
说明:
该类用于管理 HBase 的配置信息
3 Table
org.apache.hadoop.hbase.client.Table
说明:
Table是Java接口类型,不可以用Table接口直接实例化一个对象,而是必须调用Connection.getTable()方法返回Table的一个子对象,然后再调用返回的子对象的成员方法。
这个接口用于与HBase进行通信。如果多个线程对一个Table接口子对象进行put或者delete操作的话,则写缓冲器可能会崩溃。因此,在多线程环境下,建议使用HTablePool。
4 HTableDescriptor
org.apache.hadoop.hbase.HTableDescriptor
说明:
HTableDescriptor 包含了 HBase 中表格的详细信息,例如表中的列族、该表的类型(-ROOT-,.META.)、该表是否只读、MemStore的最大空间、Region什么时候应该分裂等。
5 HColumnDescriptor
org.apache.hadoop.hbase.HColumnDescriptor
说明:
HColumnDescriptor包含了列族的详细信息,例如列族的版本号、压缩设置等。
HColumnDescriptor 通常在添加列族或者创建表的时候使用。列族一旦建立就不能被修改,只能通过删除列族,然后再创建新的列族来间接的修改。一旦列族被删除了,该列族包含的数据也随之被删除。
6 Put
org.apache.hadoop.hbase.client.Put
说明:
用来对单元格执行添加数据操作。
7 Get
org.apache.hadoop.hbase.client.Get
说明:
用来获取单行的信息。
8 Result
org.apache.hadoop.hbase.client.Result
说明:
用于存放Get或Scan操作后的查询结果,并以键值对的格式存储在map结构中。该类不是线程安全的。
9 ResultScanner
org.apache.hadoop.hbase.client.ResultScanner
说明:
客户端获取值的接口。
10 Scan
org.apache.hadoop.hbase.client.Scan
说明:
可以利用Scan来限定需要查找的数据,例如限定版本跑不快、起始行号、终止行号、列族、列限定符、返回值的数量的上限等。