全部產品
Search
文件中心

ApsaraDB for HBase:使用Java API訪問增強版叢集

更新時間:Jul 06, 2024

本文介紹如何通過HBase Java API訪問ApsaraDB for HBase增強版執行個體。

前提條件

  • 已安裝Java SDK,具體操作請參見升級HBase Java SDK
  • 如果應用部署在ECS執行個體,您需要確保ApsaraDB for HBase增強版執行個體和ECS執行個體滿足以下條件,以保證網路的連通性。ECS執行個體資訊的查看方法請參見查看執行個體資訊
    • 所在地區相同,並建議所在可用性區域相同(以減少網路延時)。
    • 網路類型相同。
      說明 專用網路具有更高的安全性,建議使用專用網路。如果網路類型為專用網路,需確保使用相同的專用網路ID。
  • 已將ECS執行個體的IP地址或用戶端IP地址添加至ApsaraDB for HBase增強版執行個體的白名單中,具體操作請參見設定白名單

操作步驟

  1. 初始化HBase配置。在Project中輸入下述代碼,然後根據下表描述配置參數。
    // 建立一個Configuration
    Configuration conf = HBaseConfiguration.create();
    // 叢集的串連地址(VPC內網地址)在控制台頁面的資料庫連接介面獲得
    conf.set("hbase.zookeeper.quorum", "ld-bp150tns0sjxs****-proxy-hbaseue.hbaseue.rds.aliyuncs.com:30020");
    // xml_template.comment.hbaseue.username_password.default
    conf.set("hbase.client.username", "testuser");
    conf.set("hbase.client.password", "password");
    // 如果您直接依賴了阿里雲hbase用戶端,則無需配置connection.impl參數,如果您依賴了alihbase-connector,則需要配置此參數
    //conf.set("hbase.client.connection.impl", AliHBaseUEClusterConnection.class.getName());
    參數樣本值擷取方法
    host:portld-bp150tns0sjxs****-proxy-hbaseue.hbaseue.rds.aliyuncs.com:30020ApsaraDB for HBase增強版執行個體的Java API訪問地址的串連地址,可以通過ApsaraDB for HBase控制台查看,單擊目標執行個體,左側導覽列選擇資料庫連接,在串連資訊地區查看Java API訪問地址
    使用者名稱testuser如果您忘記使用者名稱密碼,可以通過ApsaraDB for HBase的叢集管理系統修改密碼,具體操作請參見系統管理使用者
    密碼password
  2. 建立ApsaraDB for HBase增強版和資料之間的串連。
    Connection connection = ConnectionFactory.createConnection(conf);
    說明 串連在程式生命週期內只需建立一次,該連接線程安全,可以共用給所有線程使用。在程式結束後,需要將Connection對象關閉,否則會造成串連泄露。也可以採用try finally方式防止泄露。
  3. 建立完串連後,即可使用Java API訪問HBase增強版,以下提供簡單的Java樣本。
    說明 為了相容HBase 1.x版本的用戶端,本樣本使用HBase 1.x版本用戶端的寫法。如果您使用的是HBase 2.x版本的用戶端,在某些運行軟體中會顯示Deprecated,但不會影響正常運行。
    • DDL操作
      try (Admin admin = connection.getAdmin()){
          //建表
          HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename"));
          htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family")));
          //建立一個只有一個分區的表
          //在生產上建表時建議根據資料特點預先分區
          admin.createTable(htd);
            
          //禁用表
          admin.disableTable(TableName.valueOf("tablename"));
            
          //清空表
          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();
      }