• HBase Thrift协议编程入门教程

    Thrift 是一个软件框架,用来进行可扩展且跨语言的服务的开发。Thrift 定义了一种描述对象和服务的接口定义语言(Interface Definition Language, IDL),它先通过 IDL 来定义 RPC 的接口和数据类型,再通过编译器生成不同语言的代码,并由生成的代码负责 RPC 协议层和传输层的实现。

    Thrift 支持的语言有 C++、Java、Python、PHP 等。下面将使用 Python 语言来实现通过 Thrift 客户端访问 HBase,这种方式完全脱离了 Java 和 JVM。

    Thrift 实际上是实现了 C/S 模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码,从而实现服务端和客户端跨语言的支持,例如,客户端用 Python 实现,服务器使用 Java 实现。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务即可。

    Thrift 包含了三个重要的组件,分别为 protocal、transpor t和 server。 其中,protocol 是协议层,用来定义数据的传输格式;transport 是传输层,定义数据的传输方式,可以为 TCP/IP 传输也可以是内存共享的方式;server 定义支持的服务模型。

    下面来看如何使用 Thrift 生成 Python 语言的客户端访问 HBase。

    HBase 客户端环境部署

    使用 Python 调用 HBase,需要启动 Thrift 服务,因此,需要先安装 Thrift。由于 Linux 操作系统中没有内置 Thrift 的安装包,因此需要手工建立 Thrift。

    从 Thrift 官网上下载源码 tar 包,并解压到常用目录下:

    [root@localhost local]# wget http://www.apache.org/dyn/closer.cgi?path=/thrift/O.11.0/thrift-0.11.0.tar.gz
    [root@localhost local]#tar -xzvf thrift-0..0.tar.gz

    在编译安装 Thrift 之前,需要安装依赖的库,如 Automake、LibTool、Bison、Boost 等,具体依赖库的安装参考 Thrift 官网安装手册,依赖库下载完后,即可编译并安装 Thrift:

    [root@localhost thrift-0.11.0]# ./configure
    [root@localhost thrift-0.11.0]# make
    [root@localhost thrift-0.11.0]# make install

    通过调用 thrift 命令可以验证安装是否成功:

    [root@localhost ~]# thrift -version
    Thrift version 0.11.0

    HBase 的源代码中,hbase.thrift 文件描述了 HBase 服务 API 和有关对象的 IDL 文件,需要使用 thrift 命令对此文件进行编译,生成 Python 连接 HBase 的库包。

    Hbase.thrift 文件在 hbase-1.2.6/hbase- thrift/src/main/resources/org/apache/hadoop/hbase/thrift 目录下,编译操作如下:

    //创建目录
    [root@localhost local] # mkdir pythonhbase
    //切换到该目录下
    [root@localhost local]# cd pythonhbase
    //执行 thrift 生成 HBase 的 Python 库
    [root@localhost pythonhbase]#thrift --gen py . . /hbase-1.2.6/hbase-thrift/src/main/ resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

    生成的库文件在 gen-py 的子目录下,如下所示:

    [root@localhost gen-py]# find .
    ./hbase
    ./hbase/init_.py
    ./hbase/ttypes.py
    ./hbase/constants.py
    ./hbase/Hbase.py
    ./hbase/Hbase-remote
    ./hbase/_init_.pyc
    ./hbase/Hbase.pyc
    ./hbase/ttypes.pyc
    ./_init_.py

    将 gen-py 目录下的 hbase 子目录复制到工程目录 python3.6/site-packages/hbase下直接使用,如下所示:

    [root@localhost pythonhbase.py]# python
    Python 2.7.5 (default, Apr 11 2018, 07:36:10)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import thrift
    >>>imp or t hbase

    这些命令执行成功后,表示使用 Python 语言访问 HBase 的客户端已经完成。

    HBase Thrift 服务启动

    在服务器上使用 star-hbase.sh 命令启动 HBase 服务,使用 jps 命令确定 HBase 已经启动并正在运行后,启动 Thrift服务,使用默认的设置即可正常工作,如下所示:

    [root@localhost bin]# jps
    66051 HQuorumPeer
    66391 Jps
    65577 SecondaryNameNode
    65401 DataNode
    66152 HMaster
    66280 HRegionServer
    65262 NameNode
    [rootQlocalhos t bin:] # ./hbase t hrift start
    ...
    2018-07-05 17:05:10,431 INFO [main] thrift.ThriftServerRunner: starting TBoundedThreadPoolServer on /0.0.0.0:9090 with readTimeout 60000ms; min worker threads=16z max worker threads=1000z max queued requests=1000

    目前客户端与服务器都已准备妥善,接下来测试其是否可用。在客户端的Python项目目录下 打开一个终端窗口,再次启动Python:

    [root@localhost pythonhbase]# python
    Python 2.7.5 (defaultA Apr 11 2018, 07:36:10)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>from thrift.transport import TSocket
    >>>from thrift.protocol import TBinaryProtocol
    >>>from thrift import Thrift
    >>>from hbase import Hbase
    >>>transport = TSocket.TSocket('localhost', 9090)
    >>>protocol = TBinaryProtocol.TBinaryProtocol(transport)
    >>>client = Hbase.Client (protocol)
    >>>transport. open ()
    >>>result = client.getTableNames()
    >>>print result
    [ 'base_thrift', 't1', 't2', 'test' ]
    >>>transport.close ()

    以上代码简单地完成了使用Thrift客户端访问HBase,另外还有创建表、插入数据、查询数据等操作。用户可查询 Python 项目下的 hbase/hbase.py 文件,里面提供了各种操作方法。

更多...

加载中...