本文主要介绍如何使用Java Client访问HBase标准版集群。

前提条件

  • 通过内网连接时,请确认已购买与HBase标准版在相同专有网络VPC网络下的ECS服务器,并将ECS服务器的IP地址在HBase中添加为白名单。
  • 通过外网连接时必须使用阿里提供的客户端,下载客户端请参见HBase Java SDK 下载

    若未配置白名单,请参考:配置IP白名单

背景信息

  • 云HBase企业标准版可以直接使用社区开源版客户端,也可以使用阿里定制的HBase客户端访问。
  • 如果您的运行环境上并没有HBase的client运行需要的JAR包,请在maven中添加如下的配置,把所有hbase-client的依赖都打到最终的JAR包中。
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <artifactSet>
                  </artifactSet>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>

操作步骤

  1. 获取集群的ZK连接地址。
    1. 登录云数据库HBase控制台
    2. 集群列表页面,单击标准版集群实例名称,进入集群详情页面。
    3. 集群详情页面,单击数据库连接,进入数据库连接页,复制该实例的ZK链接地址。
      添加zk链接地址
  2. 配置ZK地址,连接集群。

    在客户本地的业务代码中通过如下配置,连接集群。

    说明 用集群的ZK地址替换代码中的ZK地址,就可以使用如下的示例代码来进行HBase集群的访问,以下示例中展示了创建表、写入数据、读取数据三种场景。
     private static final String TABLE_NAME = "mytable";
     private static final String CF_DEFAULT = "cf";
     public static final byte[] QUALIFIER = "col1".getBytes();
     private static final byte[] ROWKEY = "rowkey1".getBytes();
    
     public static void main(String[] args) {
         Configuration config = HBaseConfiguration.create();
                            //ZK地址
         String zkAddress = "hb-bp1f5xxxx48a0r17i-001.hbase.rds.aliyuncs.com:2181,hb-bp1f5xxxx48a0r17i-002.hbase.rds.aliyuncs.com:2181,hb-bp1f5xxxx48a0r17i-003.hbase.rds.aliyuncs.com:2181";
         config.set(HConstants.ZOOKEEPER_QUORUM, zkAddress);
         Connection connection = null;
    
         try {
             connection = ConnectionFactory.createConnection(config);
    
             HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
             tableDescriptor.addFamily(new HColumnDescriptor(CF_DEFAULT));
             System.out.print("Creating table. ");
             Admin admin = connection.getAdmin();
             admin.createTable(tableDescriptor);
             System.out.println(" Done.");
             Table table = connection.getTable(TableName.valueOf(TABLE_NAME));
             try {
                 Put put = new Put(ROWKEY);
                 put.addColumn(CF_DEFAULT.getBytes(), QUALIFIER, "this is value".getBytes());
                 table.put(put);
                 Get get = new Get(ROWKEY);
                 Result r = table.get(get);
                 byte[] b = r.getValue(CF_DEFAULT.getBytes(), QUALIFIER);  // returns current version of value
                 System.out.println(new String(b));
             } finally {
                 if (table != null) table.close();
             }
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
             if (connection != null) {
                 try {
                     connection.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
         }
     }

后续操作

您也可以在这里下载我们提供的Java代码工程,替换其中的ZooKeeper变量部分后使用单击下载