HBase客户端使用
更新时间 2026-10-12 11:42:29
最近更新时间: 2026-10-12 11:42:29
本章节介绍如何使用HBase客户端。
前提条件与准备
1、已在翼MR控制台下载并安装 HBase 客户端(下文以安装目录 /opt/client 为例,请按实际目录修改)。
2、已下载并更新客户端配置文件,确认集群主管理节点信息。
3、执行客户端操作前,请先切换到客户端目录并加载环境变量。
连接 HBase 客户端
cd /opt/client
source bigdata_env
# 若集群启用 Kerberos,执行以下命令认证(用户需具备相应权限)
kinit hbaseuser
# 进入 HBase Shell
hbase shell说明
hbase shell 进入的是交互式命令行;输入 help 可查看全部命令及用法。退出请输入 quit。
HBase Shell 常用命令
HBase Shell 命令分为数据定义语言(DDL,管理表结构)与数据操作语言(DML,读写数据)两类。
| 分类 | 命令 | 说明 |
|---|---|---|
| DDL | create | 创建表,如 create 'test', 'f1', 'f2'。 |
| DDL | list | 列出当前所有表。 |
| DDL | describe | 查看表的结构描述,如 describe 'test'。 |
| DDL | alter | 修改表结构,如增删列族、改参数。 |
| DDL | disable / enable | 停用 / 启用表(修改、删除表前需先停用)。 |
| DDL | is_disabled / is_enabled | 判断表是否已被停用 / 启用。 |
| DDL | exists | 判断表是否存在。 |
| DDL | drop | 删除表(删除前表必须已停用)。 |
| DML | put | 写入单元格,如 put 'test','r1','f1:c1','myvalue1'。 |
| DML | get | 读取整行或指定单元格,如 get 'test','r1'。 |
| DML | scan | 扫描表数据,如 scan 'test'。 |
| DML | delete / deleteall | 删除单个单元格 / 删除整行。 |
| DML | count | 统计表的行数。 |
| DML | truncate | 清空表数据(内部为停用、删除、重建,会丢失 Region 分区)。 |
| DML | truncate_preserve | 清空表数据并保留原 Region 分区。 |
注意
对表做删除或修改结构前,必须先 disable 该表;操作完成后再 enable。drop 会永久删除数据,请谨慎执行。
快速上手
下面用一个最小示例演示"建表 → 写数据 → 按编号查询 → 按姓名查询 → 删除 → 删表"的完整流程。假设业务有一张用户信息表 user_info,列族为 i,存储姓名、性别、年龄、地址等字段。
# 1. 建表
create 'user_info', {NAME => 'i'}
# 2. 写入一条用户数据(行键为用户编号)
put 'user_info','12005000201','i:name','A'
put 'user_info','12005000201','i:gender','Male'
put 'user_info','12005000201','i:age','19'
put 'user_info','12005000201','i:address','City A'
# 3. 按用户编号查询姓名与地址
scan 'user_info', {STARTROW => '12005000201', STOPROW => '12005000202', COLUMNS => ['i:name','i:address']}
# 4. 按姓名查询(使用过滤器)
scan 'user_info', {FILTER => "SingleColumnValueFilter('i','name',=,'binary:A')"}
# 5. 删除该用户(先删字段,再删整行)
delete 'user_info','12005000201','i:age'
deleteall 'user_info','12005000201'
# 6. 删除整张表
disable 'user_info'
drop 'user_info'通过 Java 程序访问 HBase
在 Java 应用中访问 HBase,推荐使用 Maven 引入客户端依赖。以下以 HBase 2.4.12、Hadoop 3.3.3 为例:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.4.12</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>2.4.12</version>
</dependency>
</dependencies>将集群的 hbase-site.xml 放入项目 resources 目录,再使用 Kerberos 登录并建立连接。下面示例演示建表与一次写入、读取:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.security.UserGroupInformation;
Configuration conf = HBaseConfiguration.create();
conf.set("hadoop.security.authentication", "kerberos");
UserGroupInformation.setConfiguration(conf);
// 使用 keytab 登录,principal 与 keytab 路径以实际为准
UserGroupInformation.loginUserFromKeytab("user@REALM", "/path/to/user.keytab");
try (Connection connection = ConnectionFactory.createConnection(conf)) {
Admin admin = connection.getAdmin();
TableDescriptor td = TableDescriptorBuilder.newBuilder(TableName.valueOf("mytable"))
.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf")).build())
.build();
admin.createTable(td);
Table table = connection.getTable(TableName.valueOf("mytable"));
Put put = new Put(Bytes.toBytes("rowkey1"));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), Bytes.toBytes("this is value"));
table.put(put);
Get get = new Get(Bytes.toBytes("rowkey1"));
Result result = table.get(get);
byte[] value = result.getValue(Bytes.toBytes("cf"), Bytes.toBytes("col1"));
System.out.println(new String(value));
}说明
HBase 2.x 推荐使用 TableDescriptorBuilder / ColumnFamilyDescriptorBuilder 来定义表结构;早期版本中的 HTableDescriptor / HColumnDescriptor 已废弃。请按您使用的客户端版本选择对应 API。