すべてのプロダクト
Search
ドキュメントセンター

Lindorm:Java 用 ApsaraDB for HBase API を使用したアプリケーションの開発

最終更新日:Nov 09, 2025

このトピックでは、HBase Java API を使用して LindormTable にアクセスする方法について説明し、例を示します。

前提条件

手順

  1. 次のいずれかの方法で、Lindorm インスタンスに接続するようにクライアントを構成します。

    • 次の設定項目を hbase-site.xml 構成ファイルに追加します。

      <configuration>
            <!--
          クラスターのエンドポイント。コンソールの [データベース接続] ページから取得します。パブリックエンドポイントと VPC エンドポイントの違いにご注意ください。
          -->
          <property>
              <name>hbase.zookeeper.quorum</name>
              <value>ld-xxxx-proxy-hbaseue.lindormue.xxx.rds.aliyuncs.com:30020</value>
          </property>
          <!--
          ユーザー名とパスワードを設定します。両方のデフォルトは root です。必要に応じて変更してください。
          -->
          <property>
              <name>hbase.client.username</name>
              <value>testuser</value>
          </property>
          <property>
              <name>hbase.client.password</name>
              <value>password</value>
          </property>
          </configuration>
    • 次のコードスニペットをプロジェクトに追加して Configuration オブジェクトを作成し、次の表で説明するパラメーターを構成します。

      // 新しい Configuration オブジェクトを作成します。
      Configuration conf = HBaseConfiguration.create();
      // インスタンスのエンドポイント。コンソールの [データベース接続] ページから取得できます。
      conf.set("hbase.zookeeper.quorum", "host:port");
      // xml_template.comment.hbaseue.username_password.default
      conf.set("hbase.client.username", "username");
      conf.set("hbase.client.password", "password");

      パラメーター

      パラメーター値の取得方法

      host:port

      ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30020

      Lindorm コンソールの [Wide Table Engine] タブの [HBase Java API を使用したアクセス] の後に表示される LindormTable エンドポイント。詳細については、「エンドポイントの表示」をご参照ください。

      ユーザー名。

      testuser

      Lindorm インスタンスへの接続に使用するユーザー名とパスワード。パスワードを忘れた場合は、LindormTable のクラスター管理システムでパスワードを変更できます。詳細については、「ユーザーのパスワードの変更」をご参照ください。

      パスワード

      password

  2. Lindorm クライアントとデータベース間の接続を確立します。

    Connection connection = ConnectionFactory.createConnection(conf);
    説明

    接続は、プログラムのライフサイクル中に一度だけ作成されます。接続はスレッドセーフであり、すべてのスレッド間で共有できます。// プログラムの実行が停止したら、接続リークを防ぐために Connection オブジェクトを閉じます。try-finally 文を実行して接続リークを防ぐこともできます。

  3. 接続が確立されたら、Java 用 ApsaraDB for HBase API を使用して LindormTable にアクセスします。次のサンプル Java コードを使用できます。

    • DDL 操作

      try (Admin admin = connection.getAdmin()){
          // テーブルを作成します。
          HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("tablename"));
          htd.addFamily(new HColumnDescriptor(Bytes.toBytes("family")));
          // 1 つのパーティションのみでテーブルを作成します。
          // 単一のリージョンでは、クラスターの並列処理と負荷分散機能が制限されます。したがって、テーブルを作成するときに、データ特性に基づいてテーブルを事前にパーティション分割します。すべてのデータが単一のパーティションに保存されている場合、複数のパーティションにまたがる並列処理と負荷分散は実現できません。これにより、パフォーマンスのボトルネックやデータホットスポットが発生する可能性があります。
          admin.createTable(htd);
          // 複数のパーティションを持つテーブルを作成するには:
          // 次の例は、テーブルを 2 つのパーティション [-∞, 10) と [10, ∞) に事前にパーティション分割する方法を示しています。必要に応じてパーティション情報を生成します。
          // int numRegions = 2; // 作成するリージョンの数を設定します。
          // byte[][] splitKeys = new byte[numRegions-1][];
          // for (int i = 1; i < numRegions; i++) {
          //     splitKeys[i-1] = new byte[]{(byte)(i * 10)};
          // }
          // admin.createTable(tableDescriptor, splitKeys);
      
          // テーブルを無効にします。
          admin.disableTable(TableName.valueOf("tablename"));
      
          // テーブルを切り捨ててすべてのデータを削除します。テーブルを切り捨てる前に、テーブルを無効にする必要があります。
          admin.truncateTable(TableName.valueOf("tablename"), true);
      
          // テーブルを削除します。テーブルを削除する前に、テーブルを無効にする必要があります。
          admin.deleteTable(TableName.valueOf("tablename"));
      }
    • DML 操作

      // 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 = new Scan(Bytes.toBytes("startRow"), Bytes.toBytes("endRow"));
          ResultScanner scanner = table.getScanner(scan);
          for (Result result : scanner) {
              // クエリ結果を処理します。
              // ...
          }
          scanner.close();
      }