HBase Thrift サーバーを使用すると、さまざまなプログラミング言語で EMR HBase クラスターを操作できます。Java クライアントを使用せずに、HBase のデータに効率的にアクセスし、操作することが可能です。
背景情報
HBase Thrift サーバーは、Apache Thrift 上に構築されたサービスで、HBase への効率的な多言語アクセスを提供します。Thrift は、スケーラブルなクロス言語 RPC フレームワークです。現在、C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Go、Cocoa、JavaScript、Node.js、Smalltalk などをサポートしています。
HBase Thrift サーバーの特徴
デフォルトでは、EMR HBase クラスターはマスターノードで Thrift サーバーを起動し、ポート 9091 でリッスンします。
高可用性:高可用性モードでは、EMR HBase クラスターは 3 つすべてのマスターノードで Thrift サーバーを起動します。カスタムの負荷分散ポリシーを実装して、複数の Thrift サーバーインスタンスにリクエストを均等に分散させることができます。
HBase Thrift サーバーの使用
HBase サービスが有効になっている DataServing または Custom クラスターがあることを確認してください。詳細については、「クラスターの作成」をご参照ください。
このトピックでは、Python と ThriftServer v1 を例として使用します。v1 に切り替えるには、HBase の構成で hbase.thrift.server.version パラメーターを v1 に設定し、Thrift サーバーを再起動します。
-
HBase の構成を確認および更新します。
EMR コンソールで、HBase サービスの Configure タブで、
hbase.thrift.server.versionパラメーターを検索して値を確認します:-
値が
v1の場合は、次のステップに進みます。 -
値が
v1でない場合は、v1に変更し、プロンプトに従って変更を適用します。構成が適用された後、[設定] ページで、再度検索ボックスに
hbase.thrift.server.versionを入力し、その値がv1であることを確認します。
-
-
依存関係をインストールします。
-
EMR HBase クラスターのマスターノードにログインします。詳細については、「クラスターへのログイン」をご参照ください。
-
次のコマンドを実行して、Python 用の 'hbase-thrift' ライブラリをインストールします。
pip2.7 install hbase-thrift
-
-
(任意) テーブルを作成します。
以下の手順は、サンプルテーブルの作成方法を示しています。このテーブルを作成すると、このガイドの Python スクリプトを変更せずに使用できます。
-
HBase シェルを使用して HBase に接続します。詳細については、「HBase シェルの使用」をご参照ください。
-
次のコマンドを実行して、カラムファミリー名が
cfのtest_tableという名前のテーブルを作成します。create 'test_table','cf' -
次のコマンドを実行して、テーブルにデータを書き込みます。
put 'test_table','test_rowkey','cf:q','v1'
-
-
Python スクリプトを作成します。
hbase_thrift_test.pyという名前のファイルを作成し、次のコンテンツを追加します。コード内のtest_tableはテーブル名、test_rowkeyは行キーです。ご利用の環境に合わせて、必要に応じてこれらの値を置き換えてください。前のステップでサンプルテーブルを作成した場合は、変更は不要です。#! /usr/bin/env python2.7 #coding=utf-8 from thrift import Thrift from thrift.transport import TSocket, TTransport from thrift.protocol import TBinaryProtocol from hbase import Hbase socket = TSocket.TSocket('master-1-1', 9091) socket.setTimeout(60000) transport = TTransport.TBufferedTransport(socket) transport.open() protocol = TBinaryProtocol.TBinaryProtocol(transport) client = Hbase.Client(protocol) result = client.getRow("test_table", "test_rowkey") for r in result: print 'The rowkey is ', r.row print 'The value is ', r.columns.get('cf:q').value socket.close() -
Python スクリプトを実行します。
次のコマンドを実行してスクリプトを実行し、HBase データにアクセスします。
python2.7 hbase_thrift_test.pyスクリプトが正常に実行されると、次のような出力が表示されます:
The rowkey is test_rowkey The value is v1