新來的一個工程師不懂HBase,java不熟,python還行,我建議他那可以考慮用HBase的thrift調用,完成目前的工作。
首先,安裝thrift
下載thrift,這里,我用的是thrift-0.7.0-dev.tar.gz 這個版本
tar xzf thrift-0.7.0-dev.tar.gzcd thrift-0.7.0-devsudo ./configure --with-cpp=no --with-ruby=nosudo makesudo make install
然后,到HBase的源碼包里,找到
src/main/resources/org/apache/hadoop/hbase/thrift/
執行
thrift --gen py Hbase.thrift
mv gen-py/hbase/ /usr/lib/python2.4/site-packages/ (根據python版本可能有不同)
我這里寫了些調用的腳本,供大家參考
from unittest import TestCase, mainfrom thrift import Thriftfrom thrift.transport import TSocketfrom thrift.transport import TTransportfrom thrift.protocol import TBinaryProtocolfrom hbase import Hbasefrom hbase.ttypes import ColumnDescriptor, Mutation, BatchMutationclass HBaseTester:  def __init__(self, netloc, port, table="staftesttable"):    self.tableName = table    self.transport = TTransport.TBufferedTransport(      TSocket.TSocket(netloc, port))    self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport)    self.client = Hbase.Client(self.protocol)    self.transport.open()    tables = self.client.getTableNames()    if self.tableName not in tables:      self.__createTable()  def __del__(self):    self.transport.close()  def __createTable(self):    name = ColumnDescriptor(name='name')    foo = ColumnDescriptor(name='foo')    self.client.createTable(self.tableName,                [name,foo])    def put(self,key,name,foo):    name = Mutation(column="name:v", value=name)    foo = Mutation(column="foo:v",value=foo)        self.client.mutateRow(self.tablename,key,[name,foo])    def scanner(self,column):    scanner = client.scannerOpen(self.tablename,"",[column])				r = client.scannerGet(scanner)				result= []    while r:     print r[0]     result.append(r[0])     r = client.scannerGet(scanner)    print "Scanner finished"    return result                      class TestHBaseTester(TestCase):    def setUp(self):    self.writer = HBaseTester("localhost", 9090)  def tearDown(self):    name = self.writer.tableName    client = self.writer.client    client.disableTable(name)    client.deleteTable(name)  def testCreate(self):    tableName = self.writer.tableName    client = self.writer.client    self.assertTrue(self.writer.tableName in client.getTableNames())    columns =['name:','foo:']    for i in client.getColumnDescriptors(tableName):      self.assertTrue(i in columns)        def testPut(self):    self.writer.put("r1","n1","f1")    self.writer.put("r2","n2","f2")    self.writer.put("r3","n3","")    self.writer.scanner("name:")     if __name__ == "__main__":  main()以上這篇python 調用HBase的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。
新聞熱點
疑難解答