Java HBase表的常见操作(附带实例)
使用 Java 操作 HBase 的相关类都在 org.apache.hadoop.hbase.client 模块中,它们都是与 HBase 数据存储管理相关的 API。
例如,使用 Admin 接口创建、更改、删除表;使用 Table 接口向表中添加数据、查询数据。
在讲解 Java API 操作 HBase 之前,我们先介绍 Java 客户端开发环境的配置。
在 Eclipse 中手动导入 HBase 库包的方法为:

图 1 在Eclipse导入HBase库包
在工程目录的 src 目录下创建包、类文件,并在 Java 文件中导入需要的 HBase 库包,代码如下:
HTableDescriptor 类包含了表的详细信息,这个结果相当于 HBase Shell中DESCRIBE 命令查看表的类型、列族、写缓存最大缓存空间等表结构的结果。
HTableDescriptor 类提供了一些操作表结构的方法,如增加列族的 addFamily() 方法、删除列族的 removeFamily() 方法、设置属性值的 setValue() 方法等。
HColumnDescriptor 类包含了列族的详细信息,通常用于创建表和添加列族。列族一旦创建好便不能进行修改,但是可以进行删除并再次创建。该类提供了 getName()、getValue()、setValue() 等方法来操作列族的数据,示例如下:
例如,使用 Admin 接口创建、更改、删除表;使用 Table 接口向表中添加数据、查询数据。
在讲解 Java API 操作 HBase 之前,我们先介绍 Java 客户端开发环境的配置。
Java客户端开发环境配置
要使用 Java 操作 HBase,只需将使用的 HBase 库包加入引用路径。在 Eclipse 中手动导入 HBase 库包的方法为:
- 首先执行操作文件->新建->新建一个 Java 工程,在工程名字上面单击鼠标右键->属性->Java 构建路径->库->添加外部的 JAR;
- 然后在 HBase 安装目录下的 lib 文件夹中找到所有的 jar 包,并将它们导入引用路径,如下图所示。

图 1 在Eclipse导入HBase库包
在工程目录的 src 目录下创建包、类文件,并在 Java 文件中导入需要的 HBase 库包,代码如下:
// 环境配置类 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; // HBase客户端接口 import org.apache.hadoop.hbase.client.*; // 字节类 import org.apache.hadoop.hbase.util.Bytes;
构建Java客户端
在分布式环境中,Java 客户端需要通过分布式应用程序协调服务 ZooKeeper 来连接当前活跃的 HMaster 节点和需要的 HRegionServer 节点。所以先要使用 HBaseConfiguration 类来配置 ZooKeeper 的地址、端口,然后使用 Connection 类来建立连接,代码如下:Public static Configuration conf; public static Connection connection; public static Admin admin; // 连接到HBase public static void init(){ // 创建配置对象 conf = HBaseConfiguration.create(); // 配置ZooKeeper的地址、端口 conf.set("hbase.zookeeper.quorum", "localhost"); conf.set("hbase.zookeeper.property.clientPort", "2181"); // 创建连接 try{ connection = ConnectionFactory.createConnection(conf); admin = connection.getAdmin(); } catch(IOException e){ e.printStackTrace(); } }在上述代码中,使用 HBaseConfiguration.create() 方法创建相关的配置文件对象,使用该对象配置 ZooKeeper 的服务地址 localhost、端口 2181。
HBase表的操作
连接数据库后就可以执行创建表、禁用和删除表等操作,具体操作如下:public static void createTable() throws IOException{ // 创建连接 init(); TableName tableName = TableName.valueOf("Student"); if(admin.tableExists(tableName)){ // 禁用和删除表 admin.disableTable(tableName); admin.deleteTable(tableName); System.out.println(tableName.toString() + "is exists,delete it."); } // 创建表描述对象 HTableDescriptor tdesc = new HTableDescriptor(tableName); // 创建列族的描述对象 HColumnDescriptor stuInfo = new HColumnDescriptor("StuInfo"); HColumnDescriptor grades = new HColumnDescriptor("Grades"); // 给表描述对象增加列族描述对象 tdesc.addFamily(stuInfo); tdesc.addFamily(grades); // 创建表 admin.createTable(tdesc); // 关闭连接 close(); }Admin 接口用于管理 HBase 的表信息,执行创建表、删除表、列出所有表项等操作,其主要方法如下表所示。
方法 | 返回类型 | 功能描述 |
---|---|---|
admin.abort(String why, Throwable e) | void | 终止服务器或客户端 |
admin.closeRegion(byte[] regionname, String serverName) | void | 关闭 Region |
admin.createTable(TableDescriptor desc) | void | 创建表 |
admin.deleteTable(TableName tableName) | void | 删除表 |
admin.disableTable(TableName tableName) | void | 禁用表 |
admin.enableTable(TableName tableName) | void | 解禁表 |
admin.listTables() | HTableDescriptor[] | 列出所有的表 |
admin.getTableDescriptor(TableName tableName) | HTableDescriptor[] | 获取表的详细信息 |
HTableDescriptor 类包含了表的详细信息,这个结果相当于 HBase Shell中DESCRIBE 命令查看表的类型、列族、写缓存最大缓存空间等表结构的结果。
HTableDescriptor 类提供了一些操作表结构的方法,如增加列族的 addFamily() 方法、删除列族的 removeFamily() 方法、设置属性值的 setValue() 方法等。
HColumnDescriptor 类包含了列族的详细信息,通常用于创建表和添加列族。列族一旦创建好便不能进行修改,但是可以进行删除并再次创建。该类提供了 getName()、getValue()、setValue() 等方法来操作列族的数据,示例如下:
HColumnDescriptor stuInfo = new HColumnDescriptor("StuInfo"); System.out.println("列族名字:" + new String(stuInfo.getName())); // 输出stuInfo stuInfo.setValue("Name", "Jack"); //设置key-value String s = new String(stuInfo.getValue("Name"));// 将字节类型转换为字符串类型