HBase增强版通过Thrift支持多语言访问。

前提条件

已获取集群连接地址查看集群连接地址

背景信息

  • Thrift1接口不支持权限认证,且单个core节点支持1000链接,请注意链接数。
  • Thrift2只支持HTTPClient访问,并且需要添加用户名和密码。
  • Thrift的使用可以参考Apache Thrift的官方文档

操作步骤

  1. 下载Thrift安装包
    说明 一些语言提供了管理依赖的方法,可以遵循这些语言的使用习惯来安装thrift,如Python语言可以通过 pip install thrift来安装,Go语言可以直接在代码里 import {"github.com/apache/thrift/lib/go/thrift"}
  2. 下载HBase Thrift2定义文件
  3. 生成对应语言的接口定义文件。
    1. 解压步骤1已下载的thrift-0.12.0.tar包,请参考thrift安装指导
    2. 使用命令行进入已解压的thrift-0.12.0文件中执行如下命令生成接口定义文件。
       thrift --gen <language> Hbase.thrift
      例如:
      thrift --gen php Hbase.thrift 
      thrift --gen cpp Hbase.thrift 
      thrift --gen py Hbase.thrift
  4. 构造客户端访问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"]="root";
    # 密码
    headers["ACCESSSIGNATURE"]="root"
    transport.setCustomHeaders(headers)
    protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)
    client = THBaseService.Client(protocol)
    transport.open()
    # 具体操作,最后close连接
    transport.close()

相关资源

所有的Demo的完整的代码都已上传至GitHub,包括该语言thrift定义文件,以及所依赖的libray(某些语言适用)。您可以直接下载Github上相应语言的代码构造客户端访问HBase增强版。