简介:
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']