python调用hbase

python调用hbase

HBase

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

Python访问HBase

Hbase有多种访问接口,python访问hbase是通过thrift gateway来实现的。
利用thrift序列化技术,支持C++,PHP,Python等多种语言,本质最终是编译成MapReduce Job来处理HBase表数据,适合做数据统计。

1.Thrift安装

thrift 是facebook开发并开源的一个二进制通讯中间件,通过thrift,我们可以充分利用各个语言的优势,编写高效的代码。

1.1. Thrift下载(用的是0.9.3版本)

下载地址:http://mirrors.hust.edu.cn/apache/thrift/0.9.3/thrift-0.9.3.tar.gz

1.2. Thrift安装

我是在ubuntu15.10版本上安装的Thrift,安装时候遇到两个问题在这也稍微描述一下,供参考。
a) 在执行【./configure】命令时候,编译出错,错误提示为:

no acceptable C compiler found in $PATH

解决方式:
安装gcc即可

sudo apt-get install gcc

b) 同样是在执行【./configure】命令时候出错,错误提示为:

No targets specified and no makefile found

解决方式:
第一. update最新版本系统软件

sudo apt-get update

第二. 编译缺失关联软件

sudo apt-get install gcc build-essential

编译执行完毕之后,再执行【./configure】 && 【make】&&【make install】命令就可以安装成功了。

注:ubuntu版本过低也会安装失败

2. Hbase源码包下载

Hbase版本为:1.1.5
下载地址:http://mirrors.cnnic.cn/apache/hbase/stable/hbase-1.1.5-src.tar.gz

3. 用Thrift生成python访问hbase的文件

解压下载来的【hbase-1.1.5-src.tar.gz】
执行生成python文件的命令:

Sudo thrift –gen py /home/Ubuntu/Downloads/hbase-1.1.5/hbase-thrift/src/main/r/thrift/Hbase.thrift

python调用hbase_第1张图片
执行成功后会在当前目录下生成【gen-py】目录,其中包含了python版本的HBase包
gen-py目录的目录结构为:
python调用hbase_第2张图片
主要文件介绍如下:
【Hbase.py】中定义了一些HbaseClient可以使用的方法
【ttypes.py】中定义了HbaseClient传输的数据类型
将生成的HBase包放入项目代码或者放入Python环境的依赖包目录中即可调用。

4. 连接HBase

在装有HBase的服务器上先启动Thrift

4.1.启动thrift服务

进入HBase安装目录:【/tools/hd/hbase/bin】
python调用hbase_第3张图片
执行命令:

./hbase-daemon.sh start thrift

若不指定端口,则用默认端口:9090

4.2 编写客户端程序连接HBase

创建hbase表:

import Hbase
from ttypes import *
from thrift.transport import TSocket

from django.conf import settings

def client_conn():
    transport = TSocket.TSocket(settings.HBASE_HOST_IP, settings.HBASE_HOST_PORT)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Hbase.Client(protocol)
    transport.open()
    return client


def get_all_tables():
    client = client_conn()
    table_names = client.getTableNames()
    print table_names

if __name__=="__main__":
    get_all_tables()

4.3 启动hbase的shell环境操作

进入到:/tools/hd/hbase/bin目录下:
执行:./hbase shell 命令
如图:
python调用hbase_第4张图片

你可能感兴趣的:(Python)