• 技术文章 >后端开发 >Python教程

    详解python调用HBase的实例

    高洛峰高洛峰2017-03-23 17:37:32原创768

    新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。

    首先,安装thrift

    下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本

    tar xzf thrift-0.7.0-dev.tar.gz
    cd thrift-0.7.0-dev
    sudo ./configure --with-cpp=no --with-ruby=no
    sudo make
    sudo 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, main
    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 ColumnDescriptor, Mutation, BatchMutation
    class 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的实例 的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python HBase
    上一篇:使用python正则的指南图解 下一篇:详解Python用UUID库生成唯一ID的方法实例
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 深入了解python中的代码缩进规则• Python随机森林模型实例详解• Python可视化总结之matplotlib.pyplot基本参数详解• 一文掌握Python返回函数、闭包、装饰器、偏函数• python能代替JavaScript吗
    1/1

    PHP中文网