读书人

python 调用HBase 范例

发布时间: 2012-07-05 07:59:18 作者: rapoo

python 调用HBase 实例
新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。
首先,安装thrift
下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本

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()


读书人网 >perl python

热点推荐