You need to enable JavaScript to run this app.
文档中心
表格数据库 HBase 版

表格数据库 HBase 版

复制全文
下载 pdf
开发参考
Java 程序通过 Thrift2 地址访问 HBase 实例
复制全文
下载 pdf
Java 程序通过 Thrift2 地址访问 HBase 实例
表格数据库 HBase 版默认提供 ZK 连接地址用于访问实例,同时也支持通过 Thrift 接入,以满足多语言开发场景的需求。Thrift 是 HBase 标准版实例内置的服务组件,基于 Apache Thrift 通信框架开发,支持多种编程语言接入。本文介绍基于 Java 程序通过 Thrift2 地址访问 HBase 实例的操作步骤。​
前提条件​
  • 如需通过私网地址访问 HBase 实例,需同时满足如下要求:​
  • 已购 ECS 服务器与 HBase 实例在相同私有网络 VPC 下。ECS 服务器的购买方法,请参见购买云服务器。​
  • 已将 ECS 服务器的 IP 地址添加至 HBase 中的白名单中。白名单设置方法,请参见编辑白名单。​
  • 如需通过公网地址访问 HBase 实例,需确保运行 Java 工具的设备 IP 地址已加入 HBase 实例的白名单中。白名单设置方法,请参见编辑白名单。​
  • 已在 ECS 实例或本地设备上安装 Java 环境,建议使用 JDK 8 版本。更多详情,请参见 Java Downloads。​
操作步骤​
  1. 获取 HBase 实例的高可用 Thrift 连接地址。​
说明​
表格数据库 HBase 版默认未开通高可用 Thrift 连接地址,开通方法请参见开通高可用 Thrift 连接地址。​
  1. 配置高可用 Thrift 连接地址来访问 HBase 实例。​
  • 在您的业务代码中设置如下配置来连接实例。​
说明​
将代码中的 ${HBase高可用Thrift连接地址}, ${端口号} 替换为您 HBase 实例的 Thrift2 连接地址和端口号,您就可以使用如下示例代码来访问 HBase 实例。如下代码中包括了定义表、写入数据、读取数据的具体代码示例。​
  • ​
    package com.bytedance.hbase.example;​
    ​
    import org.apache.hadoop.hbase.thrift2.generated.TColumn;​
    import org.apache.hadoop.hbase.thrift2.generated.TColumnValue;​
    import org.apache.hadoop.hbase.thrift2.generated.TGet;​
    import org.apache.hadoop.hbase.thrift2.generated.THBaseService;​
    import org.apache.hadoop.hbase.thrift2.generated.TPut;​
    import org.apache.hadoop.hbase.thrift2.generated.TResult;​
    import org.apache.hadoop.hbase.thrift2.generated.TScan;​
    import org.apache.thrift.protocol.TBinaryProtocol;​
    import org.apache.thrift.protocol.TProtocol;​
    import org.apache.thrift.transport.TSocket;​
    import org.apache.thrift.transport.TTransport;​
    import org.apache.thrift.transport.layered.TFramedTransport;​
    ​
    import java.nio.ByteBuffer;​
    import java.util.Arrays;​
    import java.util.List;​
    ​
    public class HBaseThriftExample {​
    ​
    public static void main(String args[]) throws Exception{​
    // 通过 TSocket、TBinaryProtocol 开启一个到 HBase 实例的 Thrift2 连接​
    TSocket socket = new TSocket("${HBase高可用Thrift连接地址}", ${端口号});​
    TTransport transport = new TFramedTransport(socket);​
    TProtocol protocol = new TBinaryProtocol(transport);​
    ​
    THBaseService.Iface client = new THBaseService.Client(protocol);​
    transport.open();​
    ​
    // 定义表信息​
    ByteBuffer table = ByteBuffer.wrap(${"table name"}.getBytes());​
    ByteBuffer row = ByteBuffer.wrap(${"row name"}.getBytes());​
    ByteBuffer family = ByteBuffer.wrap(${"columnfamily name"}.getBytes());​
    ByteBuffer qualifier = ByteBuffer.wrap(${"qualifier name"}.getBytes());​
    ByteBuffer value = ByteBuffer.wrap(${"column value"}.getBytes());​
    ​
    // 通过 TPut 更新已有数据或插入一个新数据​
    System.out.println("---put or update a key---");​
    TPut put = new TPut();​
    put.setRow(row);​
    TColumnValue colVal = new TColumnValue(family, qualifier, value);​
    put.setColumnValues(Arrays.asList(colVal));​
    client.put(table, put);​
    ​
    // 通过 TGet 查询指定或全部列及列簇的信息​
    System.out.println("---get a row---");​
    TGet get = new TGet();​
    get.setRow(row);​
    TColumn col = new TColumn()​
    .setFamily(family) // 不指定列簇,即是获取所有列簇​
    .setQualifier(qualifier); // 不指定列名,即是获取所有列​
    get.setColumns(Arrays.asList(col));​
    TResult result = client.get(table, get);​
    //System.out.println("get row : " + new String(result.getRow()));​
    ​
    result.getColumnValues().forEach(c -> {​
    System.out.println(new String(result.getRow()) + " " + new String(c.getFamily()) + "_" +​
    new String(c.getQualifier()) + ":" + new String(c.getValue()));​
    });​
    ​
    // 通过 TScan 查询全表的信息​
    System.out.println("---scan a table---");​
    TScan scan = new TScan();​
    List<TResult> resultList = client.getScannerResults(table, scan, 2);​
    resultList.forEach(r -> r.getColumnValues().forEach(c -> {​
    System.out.println(new String(r.getRow()) + " " + new String(c.getFamily()) + "_" +​
    new String(c.getQualifier()) + ":" + new String(c.getValue()));​
    }));​
    ​
    // 通过 close 函数关闭 Thrift2 连接​
    transport.close();​
    socket.close();​
    }​
    ​
    }​
    ​
相关操作​
您也可以下载 HBase Java 代码工程 Demo,并替换其中的 Thrift2 连接地址、表名等变量后进行使用。​
​
最近更新时间:2026.09.22 14:06:25
这个页面对您有帮助吗?
有用
有用
无用
无用