全部产品
云市场
云游戏

HBase Java API 访问

更新时间:2020-08-06 10:25:43

前提条件

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

配置客户端参数

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

  • 配置文件

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

    <configuration>
      	<!--
    	集群的连接地址,在控制台页面的数据库连接界面获得(注意公网地址和VPC内网地址)
    	-->
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>ld-xxxx-proxy-hbaseue.hbaseue.xxx.rds.aliyuncs.com:30020</value>
        </property>
    	<!--
    	设置用户名密码,默认root:root,可根据实际情况调整
    	-->
        <property>
            <name>hbase.client.username</name>
            <value>root</value>
        </property>
        <property>
            <name>hbase.client.password</name>
            <value>root</value>
        </property>
    	<!--
    	如果您直接依赖了阿里云hbase客户端,则无需配置connection.impl参数,如果您依赖了alihbase-connector,则需要配置此参数
    	-->
    	<!--property>
            <name>hbase.client.connection.impl</name>
            <value>org.apache.hadoop.hbase.client.AliHBaseUEClusterConnection</value>
        </property-->
    </configuration>
  • 代码

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

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

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

创建连接

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

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

使用API

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

DDL操作

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

DML操作

//Table 为非线程安全对象,每个线程在对Table操作时,都必须从Connection中获取相应的Table对象
try (Table table = connection.getTable(TableName.valueOf("tablename"))) {
	// 插入数据
	Put put = new Put(Bytes.toBytes("row"));
	put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value"));
	table.put(put);

	// 单行读取
	Get get = new Get(Bytes.toBytes("row"));
	Result res = table.get(get);

	// 删除一行数据
	Delete delete = new Delete(Bytes.toBytes("row"));
	table.delete(delete);

	// scan 范围数据
	Scan scan = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow"));
	ResultScanner scanner = table.getScanner(scan);
	for (Result result : scanner) {
		// 处理查询结果result
        // ...
	}
	scanner.close();
}