注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mmicky 的博客

追逐刹那的惊艳

 
 
 

日志

 
 

Python开发HBase程序  

2013-12-08 00:27:31|  分类: Hbase |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原理:
除了Java之外,最常见的访问HBase的方法是通过Thrift。Thrift是一种语言和一套生成代码的工具。Thrift是一种描 述对象和服务的界面定义语言(Interface Definition Language)。它提供了一种网络协议,使用这些对象和服务定义的进程之间基于这种网络协议彼此进行通信。Thrift根据你描述的界面定义语言生成 你喜欢的语言的代码。使用这种代码,你可以编写应用,通过Thrift提供的通用语言和其他应用系统进行通信。HBase随机预装了描述服 务层和对象集合的Thrift IDL。HBase也提供了实现接口的服务。本实验将生成Thrift客户端函数库,然后利用客户端函数库通过Python访问HBase,这种方式完全 脱离了Java和JVM。同样,可以通过其他语言使用同样的方式来访问HBase,如PHP,go。

软件版本:
hadoop2.2.0(参见 hadoop2.2.0测试环境搭建
hbase0.96.0 (参见 Hbase0.96.0 +hadoop2.2.0安装

实验环境:
hadoop1 192.168.100.171(hadoop master、secondaryname、zookeeper、hbase HMaster)
hadoop2 192.168.100.172(zookeeper、hbase HRegion、Hive Shell)
hadoop3 192.168.100.173(hadoop slave、zookeeper、hbase HRegion)
hadoop4 192.168.100.174(hadoop slave、zookeeper、hbase HRegion)
hadoop5 192.168.100.175(hadoop slave、zookeeper、hbase HRegion)
dataserver 192.168.100.141(Hive metastore、MySQL Server、Oracle)

准备工作:
本次测试在dataserver进行
下载thrift0.9.1至/mnt/mydisk/soft/program/thrift-0.9.1.tar.gz
下载hbase0.96.0源码至/mnt/mydisk/soft/hadoop/hbase/hbase-0.96.0-src.tar.gz

1:安装thrift0.9.1
[root@dataserver app]# sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel
[root@dataserver app]# tar zxf /mnt/mydisk/soft/program/thrift-0.9.1.tar.gz
[root@dataserver app]# cd thrift-0.9.1
[root@dataserver thrift-0.9.1]# ./configure
**************************************************************************************
Python开发HBase程序 - mmicky - mmicky 的博客
 注意安装thrift安装上要使用Python库,如果要使用其他语言就安装上相应的语言库
**************************************************************************************
[root@dataserver thrift-0.9.1]# make
**************************************************************************************
Python开发HBase程序 - mmicky - mmicky 的博客
 注意如果要编译C++库的话,会出现上面的错误,原因是编译文件路径有问题,可以将已经编译的test/cpp/*.o复制到test/cpp/.libs后,继续编译就可以了。当然不怕麻烦的话,可以修改一下编译文件。
[root@dataserver thrift-0.9.1] cd test/cpp
[root@dataserver cpp]# cp *.o .libs/
**************************************************************************************
[root@dataserver thrift-0.9.1]# make install
[root@dataserver thrift-0.9.1]# thrift --version

2:安装HBase源代码
[root@dataserver hbase]# cd /app/hadoop
[root@dataserver hadoop]# tar /mnt/mydisk/soft/hadoop/hbase/hbase-0.96.0-src.tar.gz
[root@dataserver hadoop]# mv hbase-0.96.0 hbase096_src

3:建立python项目目录以及使用的Hbase库和thrift库
[root@dataserver hadoop]# mkdir -p /app/myprom/python/hbase
[root@dataserver hadoop]# cd hbase096_src/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift
[root@dataserver thrift]# thrift -gen py Hbase.thrift
[root@dataserver thrift]# cd gen-py
[root@dataserver gen-py]# cp -r * /app/myprom/python/hbase/
[root@dataserver thrift]# cd /app
[root@dataserver app]# easy_install thrift==0.9.1
[root@dataserver thrift2]# cd /usr/lib64/python2.6/site-packages
[root@dataserver site-packages]# cp -r thrift /app/myprom/python/hbase/
[root@dataserver site-packages]# cd /app/myprom/python/hbase
这样,项目要使用的库建立好了
Python开发HBase程序 - mmicky - mmicky 的博客
 
4:启动hadoop2.2.0、zookeeper3.4.5、HBase0.96.0
使用bin/hbase-deamon.sh start thrift 启动HBase thrift服务

5:编写python程序,使用thrift访问HBase0.96.0
编写程序前,先切换到python项目目录/app/myprom/python/hbase
[root@dataserver hbase]# python
>>> from thrift.transport import TSocket
>>> from thrift.protocol import TBinaryProtocol
>>> from hbase import Hbase
>>> transport=TSocket.TSocket("hadoop1",9090)
>>> protocol=TBinaryProtocol.TBinaryProtocol(transport)
>>> client=Hbase.Client(protocol)
>>> transport.open()
>>> client.getTableNames()
>>> client.getTableRegions("wordcount")
>>> client.getColumnDescriptors("wordcount")
Python开发HBase程序 - mmicky - mmicky 的博客
 
6:TIPS
A:HBase0.96.0还提供了thrift2(app/hadoop/hbase096_src/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2)接口,对HBase的操作有所变化,基本原理一样。下面是python代码:
>>> from thrift.transport import TSocket
>>> from thrift.protocol import TBinaryProtocol
>>> from hbase import THBaseService
>>> transport=TSocket.TSocket("hadoop1",9090)
>>> protocol=TBinaryProtocol.TBinaryProtocol(transport)
>>> client=THBaseService.Client(protocol)
>>> transport.open()
  评论这张
 
阅读(1128)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017