全部产品
云市场

HBase Java API 访问

更新时间:2020-01-07 17:18:02

准备

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

配置客户端参数

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

方式一:配置文件

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

  1. <configuration>
  2. <!--
  3. 集群的连接地址,在控制台页面的数据库连接界面获得(注意公网地址和VPC内网地址)
  4. -->
  5. <property>
  6. <name>hbase.zookeeper.quorum</name>
  7. <value>ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020</value>
  8. </property>
  9. <!--
  10. 设置用户名密码,默认root:root,可根据实际情况调整
  11. -->
  12. <property>
  13. <name>hbase.client.username</name>
  14. <value>root</value>
  15. </property>
  16. <property>
  17. <name>hbase.client.password</name>
  18. <value>root</value>
  19. </property>
  20. <!--
  21. 如果您直接依赖了阿里云hbase客户端,则无需配置connection.impl参数,如果您依赖了alihbase-connector,则需要配置此参数
  22. -->
  23. <!--property>
  24. <name>hbase.client.connection.impl</name>
  25. <value>org.apache.hadoop.hbase.client.AliHBaseUEClusterConnection</value>
  26. </property-->
  27. </configuration>

方式二:代码

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

  1. // 新建一个Configuration
  2. Configuration conf = HBaseConfiguration.create();
  3. // 集群的连接地址,在控制台页面的数据库连接界面获得(注意公网地址和VPC内网地址)
  4. conf.set("hbase.zookeeper.quorum", "ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020");
  5. // 设置用户名密码,默认root:root,可根据实际情况调整
  6. conf.set("hbase.client.username", "root")
  7. conf.set("hbase.client.password", "root")
  8. // 如果您直接依赖了阿里云hbase客户端,则无需配置connection.impl参数,如果您依赖了alihbase-connector,则需要配置此参数
  9. //conf.set("hbase.client.connection.impl", AliHBaseUEClusterConnection.class.getName());

注:如果您依赖了老版本的alihbase-connector(版本号小于1.0.9/2.0.9,请参考老版本的参数配置文档

创建连接

通过配置conf创建Connection,Conf的生成详见上一节中的代码访问方式。

  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. }