因为主要参照shine_forever的文章利用python访问Hbase(Thrift模块安装与测试),所以把类型设为转载,并对原作者表示感谢。
关于Thrift的介绍请看文章最后的第一个参考文献。
对比我的和参考文章的安装过程,其中的/usr/local/python2.7/lib/python2.7/site-packages/对应为我的/usr/local/lib/python2.7/site-packages/
其中的/usr/lib/python2.7/site-packages/对应为我的/usr/lib/python2.7/site-packages/
python版本为2.7.3
说明,python2.7.3与thrift结合没问题!
1)下载并安装thrift
>sudo tar fvxz thrift-0.9.3.tar.gz
>cd thrift-0.9.3
>sudo ./configure
>sudo make
>sudo make install
2)让thrift支持hbase
执行以下命令:
thrift --gen py /usr/hbase-0.94.11/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
注意我的hbase安装在/usr下。
会在当前目前下创建一个目录,目录名称为:gen-py
[hadoop@node1 ~]$ ll
total 7056
-rw-rw-r-- 1 hadoop hadoop 3045 Oct 14 13:55 access_log2.txt
-rw-r--r-- 1 hadoop hadoop 7118627 Feb 1 2012 access_log.txt
-rw-rw-r-- 1 hadoop hadoop 3500 Oct 22 10:17 derby.log
**drwxrwxr-x 3 hadoop hadoop 4096 Oct 24 15:28 gen-py**
-rw-rw-r-- 1 hadoop hadoop 3551 Oct 13 11:21 pig_1413170429087.log
gen-py目录结构如下:
[hadoop@node1 ~]$ tree gen-py/
gen-py/
|-- __init__.py
`-- hbase
|-- Hbase-remote
|-- Hbase.py
|-- __init__.py
|-- constants.py
`-- ttypes.py
1 directory, 6 files
3)把gen-py目录复制到python相关目录中:
sudo cp -r gen-py/hbase/ /usr/local/lib/python2.7/site-packages/.
4)让python可以import thrift模块:
sudo ln -s /usr/lib/python2.7/site-packages/thrift* /usr/local/lib/python2.7/site-packages/. //注意这与上面是一行
sudo ls -l /usr/local/lib/python2.7/site-packages/
total 12
drwxr-xr-x 2 root root 4096 Oct 24 15:32 hbase
-rw-r--r-- 1 root root 119 Oct 24 11:30 README
lrwxrwxrwx 1 root root 39 Oct 24 15:50 thrift -> /usr/lib/python2.7/site-packages/thrift
lrwxrwxrwx 1 root root 60 Oct 24 15:50 thrift-0.9.0-py2.7.egg-info -> /usr/lib/python2.7/site-packages/thrift-0.9.0-py2.7.egg-info
5)使用python通过thrift连接HBase测试
1、启动thrift【需提前启动Hadoop和HBase】
[hadoop@lenovo ~]$ hbase thrift -p 9090 start
打开另一个终端
>jps
可以发现多了一个ThriftServer。
2 编写python脚本,查看hbase中有哪些表:
创建testThrift.py文件,并chmod a+x testThrift.py
#! /usr/bin/env python
#coding=utf-8
import sys
#Hbase.thrift生成的py文件放在这里,此处与原文不同
sys.path.append('/usr/local/lib/python2.7/site-packages')
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
#如ColumnDescriptor 等在hbase.ttypes中定义
from hbase.ttypes import *
# Make socket
#此处可以修改地址和端口
transport = TSocket.TSocket('172.16.41.26', 9090)
# Buffering is critical. Raw sockets are very slow
# 还可以用TFramedTransport,也是高效传输方式
transport = TTransport.TBufferedTransport(transport)
# Wrap in a protocol
#传输协议和传输过程是分离的,可以支持多协议
protocol = TBinaryProtocol.TBinaryProtocol(transport)
#客户端代表一个用户
client = Hbase.Client(protocol)
#打开连接
transport.open()
#打印表名
print(client.getTableNames())
>./testThrift.py
[]
参考文献:
讲如何安装Thrift的How-to: Use the HBase Thrift Interface, Part 1
讲如何写python使用Thrift的How-to: Use the HBase Thrift Interface, Part 2: Inserting/Getting Rows
别人的安装过程利用python访问Hbase(Thrift模块安装与测试)