HBase增强版通过Thrift支持多语言访问。
前提条件
已获取集群连接地址查看集群连接地址。
背景信息
Thrift1接口不支持权限认证,且单个Core节点支持的连接数为1000,请注意连接数。
Thrift2只支持HTTPClient访问,并且需要添加用户名和密码。
Thrift的使用可以参考Apache Thrift的官方文档。
操作步骤
下载Thrift安装包。
说明一些语言提供了管理依赖的方法,可以遵循这些语言的使用习惯来安装thrift,如Python语言可以通过
pip install thrift
来安装,Go语言可以直接在代码里import {"github.com/apache/thrift/lib/go/thrift"}
。生成对应语言的接口定义文件。
解压步骤1已下载的
thrift-0.12.0.tar.gz
包,请参考thrift安装指导。使用命令行进入已解压的thrift-0.12.0文件中执行如下命令生成接口定义文件。
thrift --gen <language> Hbase.thrift
例如:
thrift --gen php Hbase.thrift thrift --gen cpp Hbase.thrift thrift --gen py Hbase.thrift
构造客户端访问HBase增强版。
说明HBase增强版Thrift服务器端的transport层使用的是HTTP,因此在构造客户端时,需要thrift中的ThttpClient,并且在ACL开启的情况下,需要在ThttpClient上添加两个header来向服务器传输用户名和密码进行认证。
Thrift在每个语言实现的ThttpClient都有加定制header的函数。
以Python语言为例,用以下方法构造客户端和设置连接串/用户名密码。
# -*- coding: utf-8 -*- # 以下两个模块可以通过 pip install thrift 安装获得 from thrift.protocol import TBinaryProtocol from thrift.transport import THttpClient # 下面的模块通过 thrift --gen py hbase.thrift 来生成 from hbase import THBaseService from hbase.ttypes import TColumnValue, TColumn, TTableName, TTableDescriptor, TColumnFamilyDescriptor, TNamespaceDescriptor, TGet, TPut, TScan # 连接地址 url = "http://host:9190" transport = THttpClient.THttpClient(url) headers = {} # 用户名 headers["ACCESSKEYID"]="testuser"; # 密码 headers["ACCESSSIGNATURE"]="password" transport.setCustomHeaders(headers) protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport) client = THBaseService.Client(protocol) transport.open() # 具体操作,最后close连接 transport.close()
相关资源
所有的Demo的完整的代码都已上传至GitHub,包括该语言thrift定义文件,以及所依赖的library(某些语言适用)。您可以直接下载Github上相应语言的代码构造客户端访问HBase增强版。
更多语言请参见Thrift官方文档。