Lindorm のワイドテーブルエンジンでは、C++、Python、Go などの言語で HBase 非 Java API を使用して接続できます。このトピックでは、その方法について説明します。
前提条件
-
Thrift インストールパッケージをダウンロード済みであること。
-
HBase Thrift2 定義ファイルをダウンロード済みであること。
-
LindormTable の [HBase 非 Java API によるアクセス] 用のエンドポイントを取得します。 詳細については、「エンドポイントの表示」をご参照ください。 Lindorm コンソールにログインします。 インスタンス詳細ページで、[Wide Table Engine] タブを選択し、[HBase 互換エンドポイント] セクションを展開します。 次に、[HBase 非 Java API] セクションで Virtual Private Cloud (VPC) またはパブリックネットワークのエンドポイントを取得します。 ポート番号は 9190 です。
Python などの非 Java 言語での HBase 非 Java API を使用した LindormTable への接続
Thrift インストールパッケージの使用方法の詳細については、Apache Thrift の公式ドキュメントをご参照ください。 Thrift を使用して Lindorm ワイドテーブルエンジンにアクセスするには、以下の手順に従ってください。
-
次のステートメントを実行し、HBase の Thrift2 定義ファイルを使用して、対応する言語のインターフェイス定義言語 (IDL) ファイルを生成します。
thrift --gen <language> Hbase.thrift説明languageプレースホルダーは、ターゲットのプログラミング言語 (例: python、php、cpp、py) を表します。サンプルステートメント:
thrift --gen py Hbase.thrift -
Lindorm ワイドテーブルエンジンにアクセスするためのクライアントを作成します。
Lindorm の Thrift サーバーは、トランスポート層で HTTP を使用します。クライアントを作成する際は、Thrift の ThttpClient が必要です。クライアントの作成方法は言語によって異なります。アクセス制御リスト (ACL) が有効になっている場合は、認証のために ThttpClient の 2 つのヘッダーにユーザー名とパスワードを指定します。ACL が無効になっている場合、ユーザー名とパスワードは不要です。Thrift では、言語の関数を呼び出して ThttpClient でカスタムヘッダーを指定できます。次の例では、Python を使用します。次のステートメントを実行して、クライアントを作成し、LindormTable に接続できます。
# -*- coding: utf-8 -*- # 以下の 2 つのモジュールは、'pip install thrift' コマンドを実行することで生成されます。 from thrift.protocol import TBinaryProtocol from thrift.transport import THttpClient # 以下の 2 つのモジュールは、'thrift --gen py hbase.thrift' コマンドを実行することで生成されます。 from hbase import THBaseService from hbase.ttypes import TColumnValue, TColumn, TTableName, TTableDescriptor, TColumnFamilyDescriptor, TNamespaceDescriptor, TGet, TPut, TScan # Lindorm ワイドテーブルエンジンのエンドポイントを設定します。 url = "http://ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com:9190" transport = THttpClient.THttpClient(url) headers = {} # ユーザー名を設定します。 headers["ACCESSKEYID"]="testuser"; # ユーザー名に対応するパスワードを設定します。 headers["ACCESSSIGNATURE"]="password" transport.setCustomHeaders(headers) protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport) client = THBaseService.Client(protocol) transport.open() # 操作完了後、接続を閉じます。 transport.close()