このトピックでは、HBase Java API を使用して LindormTable にアクセスする方法について説明し、例を示します。
前提条件
Java 開発キット (JDK) V1.8 以降がインストールされていること。
HBase Java API アクセス用のエンドポイントを取得済みであること。
クライアント IP アドレスを Lindorm ホワイトリストに追加済みであること。
HBase Java SDK をインストール済みであること。
手順
次のいずれかの方法で、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
Lindorm クライアントとデータベース間の接続を確立します。
Connection connection = ConnectionFactory.createConnection(conf);説明接続は、プログラムのライフサイクル中に一度だけ作成されます。接続はスレッドセーフであり、すべてのスレッド間で共有できます。// プログラムの実行が停止したら、接続リークを防ぐために 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); // 複数のパーティションを持つテーブルを作成するには: // 次の例は、テーブルを 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(); }