通过HBase Thrift Server,您可以方便地使用多种编程语言与EMR HBase集群进行交互,满足不同开发环境的需求。使用Thrift Server,您无需依赖Java客户端即可高效访问和操作HBase中的数据。
背景信息
HBase Thrift Server是基于Apache Thrift开发的一种服务,旨在为多语言开发提供高效的访问HBase的能力。Thrift是一个可伸缩的跨语言服务RPC框架。当前支持的编程语言包括C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Go、Cocoa、JavaScript、Node.js和Smalltalk等。
HBase Thrift Server特性
默认配置:EMR HBase集群默认在主节点上启动Thrift Server服务,服务端口为9091。
高可用:在高可用模式下,EMR HBase集群会在三个主节点上启动Thrift Server。您可以根据需求实现自定义的负载均衡策略,以将请求均匀分配到多个Thrift Server实例上。
使用HBase Thrift Server
已创建包含HBase服务的数据服务(DataServing )或自定义(Custom)场景的集群,详情请参见创建集群。
本文以Python语言为例,使用ThriftServer v1版本,通过将HBase配置中的hbase.thrift.server.version
设置为v1
,并重启ThriftServer,以实现版本切换至v1
。
检查并修改HBase配置。
在E-MapReduce控制台的HBase服务的配置页签,搜索并查看
hbase.thrift.server.version
的参数值:如果参数值为v1,则可直接进行下一步操作。
如果参数值不是v1,则需先将其修改为v1,并根据提示灯进行相应操作以确保其生效,然后再执行下一步。
安装依赖。
登录到EMR HBase集群的Master节点,详情请参见登录集群。
执行以下命令,安装Python和所需的Thrift库。
pip2.7 install hbase-thrift
(可选)创建表。
以下为您提供简单的创建适合后续Python脚本文件的表信息,您可以直接使用该示例。
使用HBase Shell连接HBase,详情请参见使用HBase Shell。
执行以下命令,创建一个表名为test_table,列簇为cf的表。
create 'test_table','cf'
执行以下命令,向表中写入数据。
put 'test_table','test_rowkey','cf:q','v1'
创建Python脚本。
新建一个Python脚本文件
hbase_thrift_test.py
,并输入以下内容。代码中的test_table
为表名,test_rowkey
为行键,需要您根据实际情况进行修改。如果使用前一步创建的表信息,则可以直接使用,无需进行修改。#! /usr/bin/env python2.7 #coding=utf-8 from thrift import Thrift from thrift.transport import TSocket, TTransport from thrift.protocol import TBinaryProtocol from hbase import Hbase socket = TSocket.TSocket('master-1-1', 9091) socket.setTimeout(60000) transport = TTransport.TBufferedTransport(socket) transport.open() protocol = TBinaryProtocol.TBinaryProtocol(transport) client = Hbase.Client(protocol) result = client.getRow("test_table", "test_rowkey") for r in result: print 'The rowkey is ', r.row print 'The value is ', r.columns.get('cf:q').value socket.close()
执行Python脚本。
运行以下命令,执行脚本并访问HBase数据。
python2.7 hbase_thrift_test.py
运行成功后,您将看到类似以下输出信息。
The rowkey is test_rowkey The value is v1