python 调用HBase的简单实例
新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。
首先,安装thrift
下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz这个版本
tarxzfthrift-0.7.0-dev.tar.gz cdthrift-0.7.0-dev sudo./configure--with-cpp=no--with-ruby=no sudomake sudomakeinstall
然后,到HBase的源码包里,找到
src/main/resources/org/apache/hadoop/hbase/thrift/
执行
thrift--genpyHbase.thrift
mvgen-py/hbase//usr/lib/python2.4/site-packages/(根据python版本可能有不同)
我这里写了些调用的脚本,供大家参考
fromunittestimportTestCase,main
fromthriftimportThrift
fromthrift.transportimportTSocket
fromthrift.transportimportTTransport
fromthrift.protocolimportTBinaryProtocol
fromhbaseimportHbase
fromhbase.ttypesimportColumnDescriptor,Mutation,BatchMutation
classHBaseTester:
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()
ifself.tableNamenotintables:
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])
defput(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])
defscanner(self,column):
scanner=client.scannerOpen(self.tablename,"",[column])
r=client.scannerGet(scanner)
result=[]
whiler:
printr[0]
result.append(r[0])
r=client.scannerGet(scanner)
print"Scannerfinished"
returnresult
classTestHBaseTester(TestCase):
defsetUp(self):
self.writer=HBaseTester("localhost",9090)
deftearDown(self):
name=self.writer.tableName
client=self.writer.client
client.disableTable(name)
client.deleteTable(name)
deftestCreate(self):
tableName=self.writer.tableName
client=self.writer.client
self.assertTrue(self.writer.tableNameinclient.getTableNames())
columns=['name:','foo:']
foriinclient.getColumnDescriptors(tableName):
self.assertTrue(iincolumns)
deftestPut(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的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。