利用python访问Hbase(Thrift模块安装与测试)

hadoop环境介绍:

master服务:node1

slave服务器:node2,node3,node4

mysql服务器:node29

Thrift安装在node1服务器上!

相关软件版本:

hadoop版本:hadoop-0.20.2

sqoop版本:sqoop-1.2.0-CDH3B4

java版本:jdk1.7.0_67

mysql版本:5.1.65

Thrift版本:thrift-0.9.0

thrift安装链接:http://thrift.apache.org/download/

python版本:2.7.3

ps:python2.5版本使用thrift有问题

一:测试前的准备工作

1)首先把mysql数据库中数据加载到hbase中:

mysql数据如下:

将mysql的数据导入hbase的命令格式为:

sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName --username --password password --table datatable --hbase-create-table --hbase-table hbase_tablename --column-family col_fam_name --hbase-row-key key_col_name

说明:databaseName 和datatable 是mysql的数据库和表名,hbase_tablename是要导成hbase的表名,key_col_name可以指定datatable中哪一列作 为hbase新表的rowkey,col_fam_name是除rowkey之外的所有列的列族名

2)在node1上加载mysql数据(node29)到hbase中:

sqoop import --connect jdbc:mysql://172.16.41.29/sqoop --username sqoop --password routon --table students --hbase-create-table --hbase-table students --column-family stuinfo --hbase-row-key id

在hbase中验证是否加载成功:

二 Thrift软件安装

python版本:2.7.3

步骤为:

1) 安装python2.7.3

说明:python2.7.3与thrift结合没问题,python2.5版本好像不行!

生成的Hbase.py文件中的语法rhel5 自带的python2.4 不支持

tar fvxj Python-2.7.3.tar.bz2

./configure --prefix=/usr/local/python2.7

make && make install

python2.7.3路径为:

/usr/local/python2.7/bin/python

修改默认的python版本为2.7

把python2.7设置为环境变量,系统默认python版本为2.4

rm -rf /usr/bin/python

ln -s /usr/local/python2.7/bin/python /usr/bin/python

[[email protected] thrift-0.9.0]# python -V

Python 2.7.3

2)安装thrift

tar fvxz thrift-0.9.0.tar.gz

cd thrift-0.9.0

./configure

make && make install

thrift 0.9.0

Building C++ Library ......... : no

Building C (GLib) Library .... : yes

Building Java Library ........ : no

Building C# Library .......... : no

Building Python Library ...... : yes

Building Ruby Library ........ : no

Building Haskell Library ..... : no

Building Perl Library ........ : no

Building PHP Library ......... : no

Building Erlang Library ...... : no

Building Go Library .......... : no

Building D Library ........... : no

Python Library:

Using Python .............. : /usr/bin/python


可以看到thrift支持很多语言,根据目前需求,支持python就可以了!

查看Thrift版本:

[[email protected] thrift-0.9.0]# thrift -version

Thrift version 0.9.0

3)让thrift支持hbase

执行以下命令:

thrift --gen py /usr/local/hbase-0.90.5/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

会在当前目前下创建一个目录,目录名称为:

[[email protected] ~]$ 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目录结构如下:

[[email protected] ~]$ tree gen-py/

gen-py/

|-- __init__.py

`-- hbase

|-- Hbase-remote

|-- Hbase.py

|-- __init__.py

|-- constants.py

`-- ttypes.py

1 directory, 6 files

4)把gen-py目录复制到python相关目录中:

cp -r gen-py/hbase/ /usr/local/python2.7/lib/python2.7/site-packages/.

5)让python可以import thrift模块:

[[email protected] ~]# ln -s /usr/lib/python2.7/site-packages/thrift* /usr/local/python2.7/lib/python2.7/site-packages/.

[[email protected] ~]# ls -l /usr/local/python2.7/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

6)启动thrift服务:

hbase thrift -p 9090 start

7)在node1上编写python脚本,查看hbase中有哪些表:

#! /usr/bin/env python
#coding=utf-8

import sys
#Hbase.thrift生成的py文件放在这里
sys.path.append(‘/usr/local/lib/python2.7/site-packages/hbase‘)
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())

执行脚本:

到此,通过thrift插件,python就可以和hbase进行通信!

时间: 2024-08-05 18:04:27

利用python访问Hbase(Thrift模块安装与测试)的相关文章

利用Python调用HBASE

利用Python调用HBASE的 需要安装thrift hbase-thrift 启动hbase的thrift服务:bin/hbase-daemon.sh start thrift 默认端口是9090 mysql 到hbase的数据同步: 1.put 2.Importtsv 3.编写MapReduce Job导入 4.sqoop 简单code: #!/usr/bin/env python #coding=utf-8 import sys sys.path.append('/usr/lib/pyt

【hbase】使用thrift with python 访问HBase

HBase 版本: 0.98.6 thrift   版本: 0.9.0 使用 thrift client with python 连接 HBase 报错: 1 Traceback (most recent call last): 2 File "D:\workspace\Python\py\helloworld.py", line 27, in <module> 3 tables = client.getTableNames() 4 File "E:\mazhon

利用Python访问Mysql数据库

首先要明确一点,我们在Python中需要通过第三方库才能访问Mysql. 有这样几种方式:Mysql-python(即MySQLdb).pymysql.mysql-connector.Mysql-python是用C写的,速度最快,而后两者是用纯python写的,相对来说速度慢一点.可惜的是Mysql-python只支持到python 2.7,对python 3.X都没有支持.如果你用的是python3,就用不了Mysql-python了.本文章使用的是python 3.4,用的第三方库是pymy

python学习笔记--Paramiko模块安装和使用(转)

首先安装依赖 yum -y install gcc 1 安装 pycrypto wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz tar -xf pycrypto-2.6.tar.gz cd pycrypto-2.6/ python setup.py build && python setup.py install 测试,注意大小写 python>> import Crypto 2 安

Linux搭建python环境中cx_Oracle模块安装遇到的问题与解决方法

安装或使用cx_Oracle时,需要用到Oracel的链接库,如libclntsh.so.11.1,否则会有各种各样的错误信息. 安装Oracle Instant Client就可得到这个链接库,避免安装几百兆之巨的Oracle Client. 软件下载地址: cx_Oracle的主页:http://cx-oracle.sourceforge.net/ 必需的Oracle链接库的下载地址: 常见的错误和解决方法: 一.win32二进制安装 在windows下安装cx_Oracle-5.0-11g

python学习笔记--pycurl模块安装遇到的问题。

1.用easy_install安装的时候 [[email protected] ~]# easy_install pycurl Searching for pycurl Best match: pycurl 7.19.0 Adding pycurl 7.19.0 to easy-install.pth file Using /usr/lib64/python2.7/site-packages Processing dependencies for pycurl Finished processi

利用Python imaplib和email模块 读取邮件文本内容及附件内容

#! encoding:utf8 ''' 环境: Win10 64位 Python 2.7.5 参考: http://www.pythonclub.org/python-network-application/email-format http://blog.sina.com.cn/s/blog_4deeda2501016eyf.html ''' import imaplib import email def parseHeader(message): """ 解析邮件首部

Python模块安装与读取Excel

今天,想用Python读取一下Excel中的数据,从网上查找了一个例子,是要安装相关的模块: 1:到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 下好之后,把xlrd-0.9.3.tar.gz解压后 ,把xlrd目录 直接拷贝到 python安装目录下的 Lib/site-packages/ 下,即可 或者 运行CMD安装: 和手工解压的也一样,会把xlrd复制到C:\Python27\Lib\site-pac

python里面的xlrd模块详解(一)

那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ?python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 今天就先来说一下xlrd模块: 一.安装xlrd模块 ? 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. ?或者在cmd窗口  pip