全部产品

HBase Java API 访问

更新时间:2019-05-27 12:31:28

准备

  1. 完成Java SDK安装
  2. 获取集群的连接地址

配置客户端参数

您可以通过以下两种方式,来配置访问HBase增强版的客户端参数.

方式一:配置文件

hbase-site.xml 中增加下列配置项:

  1. <configuration>
  2. <property>
  3. <name>hbase.client.connection.impl</name>
  4. <value>com.alibaba.hbase.client.AliHBaseUEConnection</value>
  5. </property>
  6. <!--
  7. 集群的连接地址(注意公网地址和VPC内网地址)
  8. -->
  9. <property>
  10. <name>hbase.client.endpoint</name>
  11. <value>HOST:PORT</value>
  12. </property>
  13. <!--
  14. 设置用户名密码,默认root:root,可根据实际情况调整
  15. -->
  16. <property>
  17. <name>hbase.client.username</name>
  18. <value>root</value>
  19. </property>
  20. <property>
  21. <name>hbase.client.password</name>
  22. <value>root</value>
  23. </property>
  24. </configuration>

方式二:代码

通过代码Create Configuration,然后增加相关配置

  1. // 新建一个Configuration
  2. Configuration conf = HBaseConfiguration.create();
  3. // 将HBase底层Connection实现替换成HBase增强版专用的AliHBaseUEConnection
  4. conf.set("hbase.client.connection.impl", AliHBaseUEConnection.class.getName());
  5. // 集群的连接地址(注意公网地址和VPC内网地址)
  6. conf.set("hbase.client.endpoint", "HOST:PORT");
  7. // 设置用户名密码,默认root:root,可根据实际情况调整
  8. conf.set("hbase.client.username", "root")
  9. conf.set("hbase.client.password", "root")

注: 访问HBase增强版不需要配置zookeeper的地址参数(hbase.zookeeper.quorum)

创建连接

通过配置conf创建Connection,然后访问HBase

  1. // 创建 HBase连接,在程序生命周期内只需创建一次,该连接线程安全,可以共享给所有线程使用。
  2. // 在程序结束后,需要将Connection对象关闭,否则会造成连接泄露。
  3. // 也可以采用try finally方式防止泄露
  4. Connection connection = ConnectionFactory.createConnection(conf);

使用API

建立完连接后,即可使用Java API访问HBase增强版集群。下面提供一些简单的Java 示例。

DDL操作

  1. try (Admin admin = connection.getAdmin()){
  2. // 建表
  3. HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename"));
  4. htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family")));
  5. // 创建一个只有一个分区的表
  6. // 在生产上建表时建议根据数据特点预先分区
  7. admin.createTable(htd);
  8. // disable 表
  9. admin.disableTable(TableName.valueOf("tablename"));
  10. // truncate 表
  11. admin.truncateTable(TableName.valueOf("tablename"), true);
  12. // 删除表
  13. admin.deleteTable(TableName.valueOf("tablename"));
  14. }

DML操作

  1. //Table 为非线程安全对象,每个线程在对Table操作时,都必须从Connection中获取相应的Table对象
  2. try (Table table = connection.getTable(TableName.valueOf("tablename"))) {
  3. // 插入数据
  4. Put put = new Put(Bytes.toBytes("row"));
  5. put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value"));
  6. table.put(put);
  7. // 单行读取
  8. Get get = new Get(Bytes.toBytes("row"));
  9. Result res = table.get(get);
  10. // 删除一行数据
  11. Delete delete = new Delete(Bytes.toBytes("row"));
  12. table.delete(delete);
  13. // scan 范围数据
  14. Scan scan = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow"));
  15. ResultScanner scanner = table.getScanner(scan);
  16. for (Result result : scanner) {
  17. // 处理查询结果result
  18. // ...
  19. }
  20. scanner.close();
  21. }

HelloWorld(Demo)

您可以下载我们的demo程序,查看访问HBase增强版的完整示例代码,连接地址稍后放出