20. Hbase thrift-server

简介:
Hbase是目前比较火的列存储数据库,由于Hbase是用Java写的,因此它原生地提供了Java接口,对非Java程序人员,怎么办呢?幸好它提供了thrift接口服务器,因此也可以采用其他语言来编写Hbase的客户端,本文即是Hbase python接口的介绍。
目前的Hbase有两套thrift接口(可以叫thrift和thrift2),它们并不兼容。根据官方文档,thrift很可能被抛弃,但网上的文章基本是介绍thrift的,我们这里采用的也是thrift。

1.启动thrift-server

要使用Hbase的thrift接口,必须将它的服务启动,启动Hbase的thrift-server进程如下:

cd /app/zpy/hbase/bin
./hbase-daemon.sh start thrift 
执行jps命令检查:
34533 ThriftServer

thrift默认端口是9090,启动成功后可以查看端口是否起来。

[hadoop@zpy11412 bin]$ lsof -i:9090
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    34533 hadoop  314u  IPv6 798279      0t0  TCP *:websm (LISTEN)

2.安装thrift所需依赖

(1)安装依赖
yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel
(2)安装boost

wget http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz 
tar xvf boost_1_53_0.tar.gz 
cd boost_1_53_0 
./bootstrap.sh 
./b2 install

3.安装thrift客户端

官网下载 thrift-0.11.0.tar.gz,解压并安装

wget http://mirrors.hust.edu.cn/apache/thrift/0.11.0/thrift-0.11.0.tar.gz
tar xzvf thrift-0.11.0.tar.gz
cd thrift-0.11.0
mkdir /app/zpy/thrift
./configure --prefix=/app/zpy/thrift
make 
make install

make可能报错如下:
g++: error: /usr/lib64/libboost_unit_test_framework.a: No such file or directory

解决:

find / -name libboost_unit_test_framework.*
cp /usr/local/lib/libboost_unit_test_framework.a  /usr/lib64/

4.使用python3连接Hbase

安装所需包

pip install thrift
pip install hbase-thrift

python 脚本如下:

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 *

transport = TSocket.TSocket('localhost', 9090)
protocol = TBinaryProtocol.TBinaryProtocol(transport)

client = Hbase.Client(protocol)
transport.open()
a = client.getTableNames()
print(a)

脚本报错

File "/app/zpy/pyenv/.pyenv/versions/3.5.3/lib/python3.5/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-1-e17848ba7457>", line 1, in <module>
        import hbase.Hbase
File "/app/zpy/pyenv/.pyenv/versions/3.5.3/lib/python3.5/site-packages/hbase/Hbase.py", line 2066
        except IOError, io:
                  ^

原因:python版本带来的语法不兼容问题
解决如下:

cd /app/zpy/pyenv/.pyenv/versions/3.5.3/lib/python3.5/site-packages/hbase
mv Hbase.py Hbase.py.bak
重新下载Hbase.py文件代替原来Hbase.py文件,下载地址如下:
http://git.zipeiyi.com/yw/code/tree/master/hbase

重新执行python脚本,执行成功后会显示如下:

[root@zpy11412 zpy]# python a.py 
['ismhash', 'ismproinfo', 'mauser_info']
    原文作者:经纶先生
    原文地址: https://www.jianshu.com/p/93e36d008313
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞