LindormTable では、Java 版 ApsaraDB for HBase API を使用してデータを読み書きできます。このトピックでは、Java 版 ApsaraDB for HBase API を使用して LindormTable に接続する方法について説明します。
前提条件
Java Development Kit (JDK) V1.8 以降がインストールされていること。
クライアントの IP アドレスが Lindorm インスタンスのホワイトリストに追加されていること。詳細については、「ホワイトリストの設定」をご参照ください。
Java 版 ApsaraDB for HBase SDK がインストールされていること。詳細については、「Java 版 ApsaraDB for HBase SDK のインストール」をご参照ください。
操作手順
設定オブジェクトを作成し、LindormTable への接続に使用するエンドポイント、ユーザー名、パスワードを設定します。
// 設定オブジェクトを作成します。 Configuration conf = HBaseConfiguration.create(); // Java 版 ApsaraDB for HBase SDK を使用して LindormTable に接続するためのエンドポイントを指定します。 conf.set("hbase.zookeeper.quorum", "host:port"); // ユーザー名とパスワードを設定します。 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 コンソールの [ワイドテーブルエンジン] タブにある [HBase Java API を使用したアクセス] の後に表示される LindormTable エンドポイント。
重要アプリケーションが Elastic Compute Service (ECS) インスタンスにデプロイされている場合、セキュリティを強化し、ネットワーク遅延を低減するために、Virtual Private Cloud (VPC) 経由で Lindorm インスタンスに接続することを推奨します。VPC 向けの LindormTable エンドポイントの取得方法の詳細については、「エンドポイントの表示」をご参照ください。
アプリケーションがローカルサーバーにデプロイされており、インターネット経由で Lindorm インスタンスに接続する必要がある場合は、Lindorm コンソールで次の手順を実行して、インスタンスのパブリックエンドポイントを有効にできます。左側のナビゲーションウィンドウで、 を選択します。[ワイドテーブルエンジン] タブで、[パブリックエンドポイントの有効化] をクリックします。
ユーザー名
testuser
Lindorm インスタンスへの接続に使用するユーザー名とパスワード。パスワードを忘れた場合は、LindormTable のクラスター管理システムでパスワードを変更できます。詳細については、「ユーザーのパスワード変更」をご参照ください。
パスワード
password
手順 1 で作成した設定オブジェクトを使用して、接続を確立します。
Connection connection = ConnectionFactory.createConnection(conf);説明Connection はプログラムのライフサイクル中に一度だけ作成されます。この Connection はスレッドセーフであり、すべてのスレッドで共有できます。プログラムの実行が停止したら、コネクションリークを防ぐために Connection オブジェクトを閉じてください。try-finally 文を実行してコネクションリークを防ぐこともできます。
接続が確立されたら、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); // テーブルを無効化します。 admin.disableTable(TableName.valueOf("tablename")); // テーブル内のすべてのデータをクリアします。テーブル内のすべてのデータをクリアする前に、テーブルを無効化する必要があります。 admin.truncateTable(TableName.valueOf("tablename"), true); // テーブルを削除します。テーブルを削除する前に、テーブルを無効化する必要があります。 admin.deleteTable(TableName.valueOf("tablename")); }DML 操作
// Table はスレッドセーフではないオブジェクトです。スレッドがテーブルに対して操作を実行する場合、そのスレッドは Connection オブジェクトから必要なテーブルを取得する必要があります。 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); // 1 行のデータを読み取ります。 Get get = new Get(Bytes.toBytes("row")); Result res = table.get(get); // 1 行のデータを削除します。 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) { // 結果を処理します。 System.out.println(result.toString()); } scanner.close(); }