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

Tablestore:Getting started with Tablestore HBase Client の概要

最終更新日:Jan 21, 2025

このトピックでは、Tablestore HBase Client を使用して、Tablestore にアクセスできるプログラムを開発する方法について説明します。

前提条件

手順

説明

この例では、HBase V2.x.x と互換性のある Tablestore HBase Client を使用しています。

手順 1: Tablestore HBase クライアントの依存関係をインポートする

プロジェクトの pom.xml ファイルに次の依存関係を追加します。

<dependencies>
    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>tablestore-hbase-client</artifactId>
        <version>2.0.12</version>
    </dependency>
</dependencies>                            

手順 2: HBase ファイルを構成する

hbase-site.xml ファイルに次のパラメーターを追加し、アクセスする Tablestore インスタンスのエンドポイント、アクセスする Tablestore インスタンスの名前、およびビジネス要件に基づいた RAM ユーザーの AccessKey ペアを構成します。

<configuration>
    <property>
        <name>hbase.client.connection.impl</name>
        <value>com.alicloud.tablestore.hbase.TablestoreConnection</value>
    </property>
    <property>
        <name>tablestore.client.endpoint</name>
        <value>endpoint</value>
    </property>
    <property>
        <name>tablestore.client.instancename</name>
        <value>instance_name</value>
    </property>
    <property>
        <name>tablestore.client.accesskeyid</name>
        <value>access_key_id</value>
    </property>
    <property>
        <name>tablestore.client.accesskeysecret</name>
        <value>access_key_secret</value>
    </property>
    <property>
        <name>hbase.client.tablestore.family</name>
        <value>f1</value>
    </property>
    <property>
        <name>hbase.client.tablestore.table</name>
        <value>ots_adaptor</value>
    </property>
</configuration>                       

手順 3: Tablestore に接続する

以下のサンプルコードは、Tablestore に接続するための TableStoreConnection オブジェクトを作成する方法の例を示しています。

Configuration config = HBaseConfiguration.create();

// Tablestore 接続オブジェクトを作成します。
Connection connection = ConnectionFactory.createConnection(config);

// Admin は、テーブルの作成、管理、削除に使用されます。
Admin admin = connection.getAdmin();                            

手順 4:テーブル操作を実行する

テーブルを作成する

次のサンプル コードは、特定の名前を持つテーブルを作成する方法の例を示しています。この例では、MaxVersion パラメーターと TimeToLive パラメーターのデフォルト値が使用されます。

// 1 つのカラムファミリーのみを含む HTableDescriptor を作成します。
HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));

// MaxVersion パラメーターと TimeToLive パラメーターのデフォルト値が使用されるカラムファミリーを作成します。MaxVersion パラメーターのデフォルト値は 1 です。TimeToLive パラメーターのデフォルト値は Integer.INF_MAX です。
descriptor.addFamily(new HColumnDescriptor(COLUMN_FAMILY_NAME));

// Admin の createTable 操作を使用してテーブルを作成します。
System.out.println("Create table " + descriptor.getNameAsString());
admin.createTable(descriptor);                            

テーブルを削除する

次のサンプル コードは、Admin API を使用してテーブルを削除する方法の例を示しています。

System.out.println("Delete the table");
admin.disableTable(table.getName());
admin.deleteTable(table.getName());                          

手順 5: 基本的なデータ操作を実行する

データを書き込む

以下のサンプルコードは、Tablestore にデータ行を書き込む方法の例を示しています。

// 読み取り、書き込み、更新、削除などの操作を実行するための Tablestore テーブルを作成します。
Table table = connection.getTable(TableName.valueOf(TABLE_NAME));

// プライマリキー値が row_1 の行を書き込むための PUT オブジェクトを作成します。
System.out.println("Write one row to the table");
Put put = new Put(ROW_KEY);

// 行の属性カラムを Tablestore に追加します。Tablestore は単一のカラムファミリーのみをサポートしています。hbase-site.xml 構成ファイルでファミリー名を指定する必要があります。hbase-site.xml 構成ファイルでファミリー名を指定しない場合、デフォルト値 f が使用されます。したがって、Tablestore にデータを書き込む場合、COLUMN_FAMILY_NAME パラメーターは空のままにすることができます。

put.addColumn(COLUMN_FAMILY_NAME, COLUMN_NAME, COLUMN_VALUE);

// HBase API を使用して PUT 操作を呼び出し、行を Tablestore に書き込みます。
table.put(put);                            

データの読み取り

  • 1 行のデータを読み取る

    次のサンプル コードは、行のデータを読み取る方法の例を示しています。

    // プライマリキー値が ROW_KEY の行を読み取るための GET オブジェクトを作成します。
    Result getResult = table.get(new Get(ROW_KEY));
    Result result = table.get(get);
    
    // 結果を表示します。
    String value = Bytes.toString(getResult.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME));
    System.out.println("Get one row by row key");
    System.out.printf("\t%s = %s\n", Bytes.toString(ROW_KEY), value);                            
  • スキャンデータ

    プライマリキーの値が特定の範囲内にあるデータを読み取ります。

    // テーブル内のすべての行のデータをスキャンします。
    System.out.println("Scan for all rows:");
    Scan scan = new Scan();
    ResultScanner scanner = table.getScanner(scan);
    
    // 結果を循環的に出力します。
    for (Result row : scanner) {
        byte[] valueBytes = row.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME);
        System.out.println('\t' + Bytes.toString(valueBytes));
    }                            

完全なサンプルコード

説明

このトピックのサンプル プログラムは、HBase API を使用して Tablestore にアクセスします。完全なサンプル プログラムは、GitHub の src/test/java/samples/HelloWorld.javaHBase プロジェクトの ディレクトリにあります。

package samples;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class HelloWorld {
    /** データテーブルの名前を指定します。 **/
    private static final byte[] TABLE_NAME = Bytes.toBytes("HelloTablestore");
    /** 行のプライマリキーを指定します。 **/
    private static final byte[] ROW_KEY = Bytes.toBytes("row_1");
    /** カラムファミリーを指定します。 **/
    private static final byte[] COLUMN_FAMILY_NAME = Bytes.toBytes("f");
    /** カラムの名前を指定します。 **/
    private static final byte[] COLUMN_NAME = Bytes.toBytes("col_1");
     /** カラムの値を指定します。 **/
    private static final byte[] COLUMN_VALUE = Bytes.toBytes("col_value");
    public static void main(String[] args) {
        helloWorld();
    }
    private static void helloWorld() {
        try  {
            // Tablestore に接続します。
            Configuration config = HBaseConfiguration.create();
            Connection connection = ConnectionFactory.createConnection(config);
            Admin admin = connection.getAdmin();
            
            // データテーブルを作成します。
            HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
            descriptor.addFamily(new HColumnDescriptor(COLUMN_FAMILY_NAME));
            System.out.println("Create table " + descriptor.getNameAsString());
            admin.createTable(descriptor);
            
            // Tablestore にデータを書き込みます。
            Table table = connection.getTable(TableName.valueOf(TABLE_NAME));
            System.out.println("Write one row to the table");
            Put put = new Put(ROW_KEY);
            put.addColumn(COLUMN_FAMILY_NAME, COLUMN_NAME, COLUMN_VALUE);
            table.put(put);
            Result getResult = table.get(new Get(ROW_KEY));
            
            // 単一行のデータを読み取ります。
            String value = Bytes.toString(getResult.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME));
            System.out.println("Get a one row by row key");
            System.out.printf("\t%s = %s\n", Bytes.toString(ROW_KEY), value);
            
            // データをスキャンします。
            Scan scan = new Scan();
            System.out.println("Scan for all rows:");
            ResultScanner scanner = table.getScanner(scan);
            for (Result row : scanner) {
                byte[] valueBytes = row.getValue(COLUMN_FAMILY_NAME, COLUMN_NAME);
                System.out.println('\t' + Bytes.toString(valueBytes));
            }
            
            // データテーブルを削除します。
            System.out.println("Delete the table");
            admin.disableTable(table.getName());
            admin.deleteTable(table.getName());
            
            // 接続を閉じます。
            table.close();
            admin.close();
            connection.close();
        } catch (IOException e) {
            System.err.println("Exception while running HelloTablestore: " + e.toString());
            System.exit(1);
        }
    }
}            

参考資料