ホームページ > バックエンド開発 > Python チュートリアル > Pythonはthriftを通じてhbaseインスタンスを操作します

Pythonはthriftを通じてhbaseインスタンスを操作します

高洛峰
リリース: 2016-10-18 14:17:37
オリジナル
1571 人が閲覧しました

Thrift は、Facebook によって開発され、オープンソース化されたバイナリ通信ミドルウェアです。Thrift を通じて、各言語の利点を最大限に活用し、効率的なコードを書くことができます。


thrift に関する論文: http://pan.baidu.com/share/link?shareid=234128&uk=3238841275


thrift のインストール: http://thrift.apache.org/docs/install / ubuntu/


インストールが完了したら、hbase のディレクトリに移動し、Hbase.thrift を見つけます。このファイルは


hbase-0.94.4/src/main/resources/org/apache/ にあります。 hadoop/hbase/ これは thrift の下にあります


thrift --gen python hbase.thrift は gen-py フォルダーを生成し、それを hbase に変更します


Python の thrift ライブラリをインストールします


sudo pip install thrift


hbase の thrift サービスを開始します: bin/hbase-daemon.sh start thrift デフォルトのポートは 9090 です


hbase テーブルを作成します:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
  
from hbase import Hbase
from hbase.ttypes import *
  
transport = TSocket.TSocket('localhost', 9090);
  
transport = TTransport.TBufferedTransport(transport)
  
protocol = TBinaryProtocol.TBinaryProtocol(transport);
  
client = Hbase.Client(protocol)
transport.open()
  
  
contents = ColumnDescriptor(name='cf:', maxVersions=1)
client.createTable('test', [contents])
  
print client.getTableNames()
ログイン後にコピー

成功したら、hbase シェルに入ります。コマンド リストを使用して、作成したばかりのテスト テーブルが正常に作成されたことを確認します。

データを挿入:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
  
from hbase import Hbase
  
from hbase.ttypes import *
  
transport = TSocket.TSocket('localhost', 9090)
  
transport = TTransport.TBufferedTransport(transport)
  
protocol = TBinaryProtocol.TBinaryProtocol(transport)
  
client = Hbase.Client(protocol)
  
transport.open()
  
row = 'row-key1'
  
mutations = [Mutation(column="cf:a", value="1")]
client.mutateRow('test', row, mutations, None)
ログイン後にコピー

データを 1 行取得:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
  
from hbase import Hbase
from hbase.ttypes import *
  
transport = TSocket.TSocket('localhost', 9090)
transport = TTransport.TBufferedTransport(transport)
  
protocol = TBinaryProtocol.TBinaryProtocol(transport)
  
client = Hbase.Client(protocol)
  
transport.open()
  
tableName = 'test'
rowKey = 'row-key1'
  
result = client.getRow(tableName, rowKey, None)
print result
for r in result:
    print 'the row is ' , r.row
    print 'the values is ' , r.columns.get('cf:a').value
ログイン後にコピー

複数の行を返すには、スキャンを使用する必要があります:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
  
from hbase import Hbase
from hbase.ttypes import *
  
transport = TSocket.TSocket('localhost', 9090)
transport = TTransport.TBufferedTransport(transport)
  
protocol = TBinaryProtocol.TBinaryProtocol(transport)
  
client = Hbase.Client(protocol)
transport.open()
  
scan = TScan()
tableName = 'test'
id = client.scannerOpenWithScan(tableName, scan, None)
  
result2 = client.scannerGetList(id, 10)
  
print result2
ログイン後にコピー

scannerGet は一度に 1 行のデータのみを取得します:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
  
from hbase import Hbase
from hbase.ttypes import *
  
transport = TSocket.TSocket('localhost', 9090)
transport = TTransport.TBufferedTransport(transport)
  
protocol = TBinaryProtocol.TBinaryProtocol(transport)
  
client = Hbase.Client(protocol)
transport.open()
  
scan = TScan()
tableName = 'test'
id = client.scannerOpenWithScan(tableName, scan, None)
result = client.scannerGet(id)
while result:
    print result
    result = client.scannerGet(id)
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート