Thrift を使用して、Python、Go、C++、Node.js、または PHP から ApsaraDB for HBase Performance-enhanced Edition クラスターに接続します。
前提条件
開始する前に、以下をご確認ください。
ご利用のクラスターのエンドポイント。 エンドポイントを取得するには、「パブリックエンドポイントの申請」をご参照ください。
仕組み
ApsaraDB for HBase Performance-enhanced Edition は、Thrift トランスポートレイヤーで HTTP を使用します。 すべてのクライアントは、標準のソケットトランスポートではなく、THttpClient を使用して接続する必要があります。 Thrift 2 の場合、THttpClient インスタンスでユーザー名とパスワードをカスタム HTTP ヘッダーとして指定する必要があります。
Thrift 1 と Thrift 2 の比較
| 機能 | Thrift 1 | Thrift 2 |
|---|---|---|
| 認証 | サポートされていません | 必須 (ユーザー名 + パスワード) |
| コアノードあたりの最大接続数 | 1,000 | — |
| トランスポート | THttpClient | THttpClient (HTTP のみ) |
新規の統合には Thrift 2 を使用してください。 Thrift 1 には認証サポートがなく、ACL が有効になっているクラスターには適していません。
Thrift のセットアップ
Thrift コンパイラのインストール
ほとんどの言語では、パッケージマネージャを介して Thrift ライブラリを直接インストールできます。 コンパイラは、Hbase.thrift からインターフェイス定義ファイルを再生成する必要がある場合にのみダウンロードしてください。
パッケージマネージャ (推奨):
| 言語 | コマンド |
|---|---|
| Python | pip install thrift |
| Go | import "github.com/apache/thrift/lib/go/thrift" を Go モジュールに追加 |
手動でのコンパイラのインストール: thrift-0.12.0.tar.gz をダウンロードし、「Thrift インストールガイド」に従ってください。
インターフェイス定義ファイルの生成
ApsaraDB for HBase 用の Thrift 2 定義ファイルをダウンロードします。
Thrift コンパイラパッケージを展開し、展開したディレクトリから次のコマンドを実行して、言語固有のバインディングを生成します:
thrift --gen <language> Hbase.thrift例:
thrift --gen py Hbase.thrift thrift --gen cpp Hbase.thrift thrift --gen php Hbase.thrift
クライアントの初期化
次の例では Python を使用します。 他の言語にも同じパターンを適用します。THttpClient を作成し、認証ヘッダーを追加し、TBinaryProtocol でラップして、プロトコルを THBaseService.Client に渡します。
# -*- coding: utf-8 -*-
# Thrift ライブラリのインストール: pip install thrift
from thrift.protocol import TBinaryProtocol
from thrift.transport import THttpClient
# 生成元: thrift --gen py Hbase.thrift
from hbase import THBaseService
from hbase.ttypes import (
TColumnValue, TColumn, TTableName, TTableDescriptor,
TColumnFamilyDescriptor, TNamespaceDescriptor,
TGet, TPut, TScan
)
# <host> をご利用のクラスターエンドポイントに置き換えます。
url = "http://<host>:9190"
# HBase Thrift サーバーは標準のソケットトランスポートではなく HTTP トランスポートを使用するため、THttpClient が必要です。
transport = THttpClient.THttpClient(url)
# 認証情報をカスタム HTTP ヘッダーとして渡します。 Thrift 2 ではユーザー名とパスワードが必要です。
headers = {
"ACCESSKEYID": "<your-username>", # クラスターのユーザー名
"ACCESSSIGNATURE": "<your-password>", # クラスターのパスワード
}
transport.setCustomHeaders(headers)
# TBinaryProtocolAccelerated は、利用可能な場合に C 拡張機能を使用してシリアル化を高速化し、利用できない場合は純粋な Python 実装にフォールバックします。
protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)
# 設定されたプロトコルを使用して HBase クライアントを作成します。
client = THBaseService.Client(protocol)
# 呼び出しを行う前に接続を開きます。
transport.open()
# ここに HBase 操作を記述します。
# 完了したらトランスポートを閉じて接続を解放します。
transport.close()プレースホルダー:
| プレースホルダー | 説明 |
|---|---|
<host> | ご利用のクラスターエンドポイント (http:// プレフィックスなし) |
<your-username> | クラスターのユーザー名 |
<your-password> | クラスターのパスワード |
Thrift 1 は認証をサポートしていません。 ご利用のクラスターで認証情報が必要な場合は、上記のように Thrift 2 を使用してください。
サンプルコード
各言語の完全な実行可能なクライアントのサンプルは GitHub で入手できます。 各リポジトリには、Thrift 定義ファイルと、言語固有の依存関係が含まれています。
| 言語 | リンク |
|---|---|
| Python | サンプルコードのダウンロード |
| Go | サンプルコードのダウンロード |
| C++ | サンプルコードのダウンロード |
| Node.js | サンプルコードのダウンロード |
| PHP | サンプルコードのダウンロード |
次のステップ
Apache Thrift チュートリアル — サポートされているすべての言語にわたる Thrift の操作について詳しく学びます