python通過thrift操作hbase實例

ybw8 9年前發布 | 18K 次閱讀 Python開發 HBase

thrift 是非死book開發并開源的一個二進制通訊中間件,通過thrift,我們可以充分利用各個語言的優勢,編寫高效的代碼。關于thrift的論文:...

thrift 是非死book開發并開源的一個二進制通訊中間件,通過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()</pre>

執行代碼,成功后,進入hbase的shell,用命令list可以看到剛剛的test表已經創建成功。

插入數據:

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)</pre>

獲取一行數據:

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</pre>

返回多行則需要使用scan:

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</pre>

scannerGet則是每次只取一行數據:

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)</pre>


</div>

 本文由用戶 ybw8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!