您的位置:首页 > 编程语言 > Python开发

使用Python语言通过Thrift 网关操作HBase

2013-11-07 17:12 411 查看
现在的需求是想使用Python来解析数据,然后将数据载入到HBase数据库中。所以想使用Python操作HBase的话,就必须使用thrift网关。所以我的第一步就是先了解一下thrift网关是个什么东西。

以下的东西基本上来自网上的资料。

Thrift是一个软件框架,用来进行可扩展的且跨语言的服务开发,他结合了功能强大的 软件duizhan和代码生成引擎,用来构建在多种编程语言之间的高效的无缝的服务。

目前流行的服务调用方式有很多种,例如基于SOAP消息格式的WEB SERVICE和基于JSON格式的RESTful服务。其中所用到的数据传输方式包括XML和JSON,但是XML相对体积较大,传输效率比较低。JSON体积小,新颖,但是还是不够完善。Thrift是FB开发的远程服务调用框架,采用接口描述定义语言并创建服务,传输的数据采用二进制的格式,数据量更小,对于高并发,大叔据量和跨语言的环境更有优势。

通过Python使用HBase Thrift网关

HBase随机预装连描述服务层和对象集合的Thrift IDL。HBase也提供了实现接口的服务。下边将生成Thrift客户端库来访问HBase。使用客户端库通过Python访问HBase,这种方式完全脱离Java和JVM。

但是这样的网关面临和REST一样的吞吐量挑战。所有客户端链接就像漏斗一样通过和HBase集群通信的单台机器。

下面的内容基本上是基于HBase in action这本书上的操作。

一 .生成python语言的HBase Thrift客户端

1.先安装Thrift

mac里边可以直接通过homebrew安装:brew install thrift

但是在Ubuntu里,需要自己编译:

首先安装好thrift需要的其他库
sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev


然后下载thrift的tar包,解压到制定的路径,参照http://thrift.apache.org/docs/BuildingFromSource/

./configure之后make的时候会出现下边的错误:

ar: .libs/ThriftTest_constants.o: No such file or directory

根据网上的信息,在./configure时候取消对C++的支持,即: ./configure -with-cpp=no 然后在make和make install。这里我基本上安装之后只支持Python语言,如果后续需要其他方面的使用的话,估计得重新编译安装。

验证thrift是不是能够正常工作: thrift -version

2.创建一个自己的工程目录 mkdir ****/modis.py(以后的****均表示我自己的某个目录路径)

生成HBase客户端

cd modis.py

thrift -gen py ****/hbase-0.94.11/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

mv gen-py/* .

rm -r gen-py/

在上面的步骤里我创建了一个叫做modis.py的项目,然后生成了HBase Python库。Thrift在gen-py子目录里生成连他的代码,吧这些文件移动到项目里,生成的文件如下:

# find .

.

./hbase

./hbase/Hbase.py

./hbase/ttypes.py

./hbase/__init__.py

./hbase/Hbase-remote

./hbase/constants.py

./__init__.py

3.安装Thrift Python库,这是通过python使用的所有thrift服务的核心组见。可以全局性的安装

sudo easy_install thrift==0.9.1

这个库也是编译的源代码的一部分,所以可以像处理HBase客户端的方法将其拷贝到工程的目录下:

mkdir thrift

cp -r /usr/lib/python2.7/site-packages/thrift/* ./thrift/

验证:

在本目录下打开python客户端import hbase和import thrift都成功。

二.启动HBase Thrift服务

Thrift的服务器组建已经和HBase一起预先安装连,所以没有上边的客户端的生成步骤,直接启动就可以。启动之前确保HBase是正常运作的。

hbase thrift start

这个开启之后不是后台进程,所以一直都是开着的,你需要另外启动一个终端来做后面的测试。

在我们的项目目录下启动Python,测试下面的内容,最后返回的是HBase数据库中的所有数据表的名称。

>>> from thrift.transport import TSocket

>>> from thrift.protocol import TBinaryProtocol

>>> from hbase import Hbase

>>> transport=TSocket.TSocket('localhost',9090)

>>> protocol=TBinaryProtocol.TBinaryProtocol(transport)

>>> client=Hbase.Client(protocol)

>>> transport.open()

>>> client.getTableNames()

['test']

到这里的所有一切都正常工作了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: