网站首页Python相关

python操作Hbase

发布时间:2016-08-19编辑:阿超阅读(1534

    由于需要自行到hbase提取数据,而java功底又不好。研究了下python与hbase。

    python需要通过thrift来连接hbase,首先需要在hadoop集群上配置thrift 

    配置

    我的系统环境:

        centos-6.6
        python-2.6.6
        hadoop-2.5
        hbase-0.98
        thrift-0.92

    编译thrift需要的前提,如果编译的时候提示版本号太低,请先升级相应的软件。:

        bison>=2.5
        automake>=1.9
        autoconf>=2.6

        

    1:安装C++依赖库:

    # yum -y install libevent-devel zlib-devel openssl-devel

    2:下载thrift源码包

    # wget http://apache.arvixe.com/thrift/0.9.2/thrift-0.9.2.tar.gz

    3:解压并编译:

    # tar -xvf thrift-0.9.2.tar.gz
    # cd thrift-0.9.2
    # ./configure --enable-lua=no
    此处应该可以看到显示python yes
    # make && make install

    不选择路径的情况下默认编译到/usr/local/bin/thrift

    4:验证是否安装完成

    #thrift -version

    显示:Thrift version 0.9.2

    5:让thrift支持hbase,生成py文件:

    # thrift --gen py $HBASE_HOME/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

    注意:不同的hbase版本可能所在的文件目录有区别

    可以看到在当前目录下生成了一个gen-py文件夹,结构如下:

    gen-py/
    ├── hbase
    │?? ├── constants.py
    │?? ├── Hbase.py
    │?? ├── Hbase-remote
    │?? ├── __init__.py
    │?? └── ttypes.py
    └── __init__.py

    将hbase文件夹复制到python的sitepackages目录中

    # cp -r gen-py/hbase/ /usr/lib/python2.6/site-packages/

    让python可以import


    6:打开thrift服务

    nohup hbase thrift -p 9090 start &

    至此thrift配置完毕,后面是python教程

    使用

    通过pip安装thrift库:pip install thrift


    hbase Hbase
    thrift.transport TSocketTTransport
    thrift.protocol TBinaryProtocol
    
    HOST = IPADDRPORT = transport = TSocket.TSocket(HOSTPORT)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Hbase.Client(protocol)
    transport.open()
    tables = client.getTableNames()
    tables

    如上代码是显示hbase现有的表的列表。

    其它接口请看文档1文档2


    后面在查找api的过程中发现了已经有人将这个进行了封装:

    happybase这个库就是用来连接hbase的,环境配置如上所示一样,

    然后按照教程里面安装好happybase,Source codeDocumentation 。

    如下程序实现了向TEST表插入10000组随机数:


    import random
    from uuid import uuid1
    import happybase
    pool = happybase.ConnectionPool(size=3, host=
    HOST)
    with pool.connection() as con:
       table = con.table(
    'TEST')
       beatch =
    happybase.Batch(table)
       
    for i in xrange(10000):
           beatch.put(
    str(uuid1()), {'INFO:name': str(random.randint(0, 100)),'INFO:age': str(random.randint(0, 100)),'INFO:weight': str(random.randint(120, 220)),})
       beatch.send()

    happybase接口说明地址:API reference