tencent cloud

弹性 MapReduce

动态与公告
产品动态
产品公告
安全公告
产品简介
产品概述
产品优势
产品架构
产品功能
应用场景
约束与限制
技术支持范围
产品发行版
购买指南
EMR on CVM 计费说明
EMR on TKE 计费说明
EMR Serverless HBase 计费说明
快速入门
EMR on CVM 快速入门
EMR on TKE 快速入门
EMR on CVM 操作指南
规划集群
管理权限
配置集群
管理集群
管理服务
监控告警
智能管家
EMR on TKE 操作指南
EMR on TKE 简介
配置集群
管理集群
管理服务
监控运维
应用分析
EMR Serverless HBase 操作指南
EMR Serverless HBase 产品简介
配额与限制
规划实例
管理实例
监控告警
开发指南
EMR 开发指南
Hadoop开发指南
Spark 开发指南
HBASE开发指南
Phoenix on Hbase 开发指南
Hive 开发指南
Presto开发指南
Sqoop 开发指南
Hue 开发指南
Oozie 开发指南
Flume 开发指南
Kerberos 开发指南
Knox 开发指南
Alluxio 开发指南
Kylin 开发指南
Livy 开发指南
Kyuubi 开发指南
Zeppelin 开发指南
Hudi 开发指南
Superset 开发指南
Impala 开发指南
Druid 开发指南
Tensorflow 开发指南
Kudu 开发指南
Ranger 开发指南
Kafka 开发指南
Iceberg 开发指南
StarRocks 开发指南
Flink 开发指南
JupyterLab 开发指南
MLflow 开发指南
实践教程
EMR on CVM 运维实践
数据迁移实践
自定义伸缩实践教程
API 文档
History
Introduction
API Category
Cluster Resource Management APIs
Cluster Services APIs
User Management APIs
Data Inquiry APIs
Scaling APIs
Configuration APIs
Other APIs
Serverless HBase APIs
YARN Resource Scheduling APIs
Making API Requests
Data Types
Error Codes
常见问题
EMR on CVM常见问题
服务等级协议
联系我们

Serverless HBase 使用说明

PDF
聚焦模式
字号
最后更新时间: 2025-12-09 18:02:20

操作场景

通过 Shell、Java 以及 Golang 访问 EMR Serverless HBase 实例并进行建表和查询等操作。

准备工作

已经创建了一个 EMR Serverless HBase 实例且实例状态为运行中。
已经创建一台与 EMR Serverless HBase 实例同 VPC 和子网的 CVM 实例(后面简称 CVM 客户机)。
在 CVM 客户机上已安装 Java 环境并配置环境变量,安装要求 JDK1.8 以上版本,如未安装,获取安装并配置 Java 环境
已在 EMR Serverless HBase 实例信息页获取 Serverless HBase 实例的 ZooKeeper 地址。
说明:
更多 HBase API 使用请查阅 Apache HBase 官网:https://hbase.apache.org/2.4/apidocs/index.html

使用 HBase Shell

配置环境

1. 登录 CVM 客户机,然后下载 HBase 客户端,解压并切换到 emr-serverless-hbase-client 目录。
cd /usr/local
wget https://emr-serverless-hbase-1259353343.cos.ap-guangzhou.myqcloud.com/client/emr-serverless-hbase-client.tar.gz
tar -zxvf emr-serverless-hbase-client.tar.gz
cd emr-serverless-hbase-client
2. k修改 conf/hbase-site.xml 中的 hbase.zookeeper.quorum 参数配置,$quorum 是ZooKeeperr 地址。
vi conf/hbase-site.xml
<property>
<name>hbase.zookeeper.quorum</name>
<value>$quorum</value>
</property>

HBase 基本操作

1. 通过如下命令可以进入 HBase Shell。
./bin/hbase shell
2. 在 HBase shell 下输入 help 可以查看基本的使用信息和示例的指令。可以使用以下指令建立一个新表。
hbase:001:0> create 'test', 'cf'
Created table test
Took 1.5703 seconds
=> Hbase::Table - test
3. 表格建立后,可以使用 list 指令来查看您建立的表是否已经存在。
hbase:002:0> list 'test'
TABLE
test
1 row(s)
Took 0.0158 seconds
=> ["test"]
4. 使用 put 指令来为您创建的表加入数据。在创建的表中加入了三个值,第一次在“row1”行“cf:a”列插入了一个值“value1”,以此类推。
hbase:003:0> put 'test', 'row1', 'cf:a', 'value1'
Took 0.1766 seconds
hbase:004:0> put 'test', 'row2', 'cf:b', 'value2'
Took 0.0160 seconds
hbase:005:0> put 'test', 'row3', 'cf:c', 'value3'
Took 0.0149 seconds
5. 使用 scan 指令来遍历整个表。
hbase:006:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=2024-07-16T10:56:28.027, value=value1
row2 column=cf:b, timestamp=2024-07-16T10:56:40.658, value=value2
row3 column=cf:c, timestamp=2024-07-16T10:56:51.744, value=value3
3 row(s)
Took 0.0682 seconds
6. 使用 get 指令来取得表中指定行的值。
hbase:007:0> get 'test', 'row1'
COLUMN CELL
cf:a timestamp=2024-07-16T10:56:28.027, value=value1
1 row(s)
Took 0.0361 seconds
7. 使用 drop 指令来删除一个表,在删除表之前需要先使用 disable 指令来禁用一个表。
hbase:008:0> disable 'test'
Took 0.6919 seconds
hbase:009:0> drop 'test'
Took 0.3451 seconds
8. 最后可以使用 exit 指令来关闭 HBase Shell。

使用 Java API

确保开发环境下有合适的 JDK 版本,安装配置 Maven 的环境变量,如果您使用 IDE,请在 IDE 中设置 Maven 相关配置。如有需要,使用腾讯云镜像源加速Maven,在 Maven 配置文件 settings.xml 追加如下 repository mirror。
<mirror>
<id>nexus-tencentyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus tencentyun</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>

新建一个Maven 工程

在命令行下进入您想要新建工程的目录,输入如下命令新建一个 Maven 工程。
mvn archetype:generate -DgroupId=com.tencent.cloud -DartifactId=test-serverless-hbase -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-quickstart
创建成功后,在工程目录下就会生成一个名为 test-serverless-hbase 的工程文件夹。其中的文件结构如下所示。pom.xml 文件主要用于依赖管理和打包配置,Java 文件夹下放置您的源代码。
test-serverless-hbase
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── tencent
│ └── cloud
│ └── App.java
└── test
└── java
└── com
└── tencent
└── cloud
└── AppTest.java

添加配置和样例代码

在 pom.xml 文件中添加 Maven 依赖、打包和编译插件。
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.4.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>8</source>
<target>8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 此处指定main方法入口的class -->
<mainClass>com.tencent.cloud.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
【可选】如果在之后的调试中遇到样例执行失败需要从标准输出中获取日志定位错误,或者您希望保存操作日志到指定目录 target/serverless-hbase.log,您可以在main 文件夹下创建 Java 配置文件目录 resources,创建 Log4j.properties 文件并在 log4j.properties 文件中添加 log4j 日志信息打印模块的配置信息。
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/serverless-hbase.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
App.java 样例代码如下。
package com.tencent.cloud;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
/**
* 通过 HBase Java API 访问 Serverless HBase 实例
*/
public class App {
public static void main(String[] args) throws IOException {
// $quorum 在控制台实例信息页面通过访问方式模块 zookeeper 访问地址获取。
// 示例:conf.set("hbase.zookeeper.quorum", "10.0.0.8,10.0.0.11,10.0.0.5");
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "$quorum");
// 建立 EMR Serverless HBase 客户端和数据之间的连接
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
// 连接建立后,可以使用HBase Java API 访问 Serverless HBase 实例。
TableDescriptorBuilder tableBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("test1"));
ColumnFamilyDescriptor cf = ColumnFamilyDescriptorBuilder.of("cf");
tableBuilder.setColumnFamily(cf);
TableDescriptor table = tableBuilder.build();
System.out.println("Creating Table.");
if (admin.tableExists(table.getTableName())) {
admin.disableTable(table.getTableName());
admin.deleteTable(table.getTableName());
}
admin.createTable(table);
System.out.println("Inserting Data.");
Table table1 = connection.getTable(TableName.valueOf("test1"));
Put put1 = new Put(Bytes.toBytes("row1"));
put1.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("a"),Bytes.toBytes("value1"));
table1.put(put1);
Put put2 = new Put(Bytes.toBytes("row2"));
put2.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("b"),Bytes.toBytes("value2"));
table1.put(put2);
Put put3 = new Put(Bytes.toBytes("row3"));
put3.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("c"),Bytes.toBytes("value3"));
table1.put(put3);
System.out.println(" Done.");
}
}

编译代码并打包上传

使用本地命令行进入工程目录,执行以下指令对工程进行编译打包。
mvn package
日志打印 build success 表示操作成功,在工程目录下的 target 文件夹中能够看到打包好的 jar 包,您需要将以 with-dependencies 为尾缀的 jar 包通过 CVM 实例控制台中的上传文件功能上传到 CVM 客户机中。
若 CVM 客户机可以通过公网 IP 访问,也可以在本地命令行模式下运行以下命令上传文件。
scp $localfile root@公网IP地址:$remotefolder
其中,$localfile 是您的本地文件的路径加名称,root 为 CVM 服务器用户名,公网 IP 可以在 CVM 客户机控制台查看。$remotefolder 是您想存放文件的 CVM 服务器路径。上传完成后,在 CVM 客户机命令行中即可查看对应文件夹下是否有相应文件。

执行样例并查看结果

登录 CVM 客户机,切换到对应文件夹下,使用如下命令执行样例。
java –jar $package.jar
运行代码,在控制台输出“Done”后,说明所有的操作已完成。您可以切换到 HBase shell 中通过 list 命令来查看使用 API 创建的 HBase 表是否成功,若成功可通过 scan 命令来查看表的具体内容。
hbase:001:0> list 'test1'
TABLE
test1
1 row(s)
Took 0.4315 seconds
=> ["test1"]
hbase:002:0> scan 'test1'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=2024-07-16T16:20:38.685, value=value1
row2 column=cf:b, timestamp=2024-07-16T16:20:38.690, value=value2
row3 column=cf:c, timestamp=2024-07-16T16:20:38.695, value=value3
3 row(s)
Took 0.1231 seconds
hbase:003:0> exit

使用 Golang API

添加环境和样例代码

在 CVM 客户机上 安装 Golang 并配置环境变量。以 go1.17.13 版本为例。
cd /usr/local
wget https://go.dev/dl/go1.17.13.linux-amd64.tar.gz
tar -zxvf go1.17.13.linux-amd64.tar.gz
vi /etc/profile
在/etc/profile中追加
export GO_HOME=/usr/local/go
export PATH=${GO_HOME}/bin:$PATH
后保存返回命令行
source /etc/profile
确保开发环境下有一致的 Golang 版本,进入工程目录,如果工程目录下没有 go.mod 文件,执行以下命令。
go mod init test-serverless-hbase
根据 Golang 版本下载 gohbase 依赖分支(查看 gohbase 项目地址)。
Golang Version
commit_id
1.22.x
731f0bdb6be56dfe0b5a5a79582161bc7fbed32b
1.18.x~1.21.x
1fee39f343954ca7501a6b8f25abd9f86eaf618b
1.13.x~1.17.x
05795eede1cb2442e6cc0313db93a4b544b49148

更多 Golang 版本对应的 Commit 可以在 Commits · tsuna/gohbase · GitHub 中查看。
go env -w GOPROXY=https://goproxy.cn
go get github.com/tsuna/gohbase@commit_id
# 以1.17.13版本为例:go get github.com/tsuna/gohbase@05795eede1cb2442e6cc0313db93a4b544b49148
在项目目录下创建样例代码文件 demo.go,此时工程目录结构如下。
test-serverless-hbase/
├── demo.go
├── go.mod
└── go.sum
demo.go 样例代码如下。
package main
import (
"context"
"fmt"
"github.com/tsuna/gohbase"
"github.com/tsuna/gohbase/hrpc"
"log"
)
func main() {
// $quorum 在控制台实例信息页面通过访问方式模块zookeeper访问地址获取。
// 示例:quorum := "10.0.0.8,10.0.0.11,10.0.0.5"
quorum := $quorum
// 创建表格
tableName := "test2"
var cfs = map[string]map[string]string{
"cf1": {
"MIN_VERSIONS": "1",
},
}
admin := gohbase.NewAdminClient(quorum)
crt := hrpc.NewCreateTable(context.Background(), []byte(tableName), cfs)
err := admin.CreateTable(crt)
if err != nil {
log.Fatal(err)
}
client := gohbase.NewClient(quorum)
// 写入数据
putRequest, err := hrpc.NewPutStr(context.Background(), tableName, "my_row_key", map[string]map[string][]byte{
"cf1": map[string][]byte{
"col1": []byte("value1"),
"col2": []byte("value2"),
},
})
_, err = client.Put(putRequest)
if err != nil {
log.Fatalf("Failed to put data into HBase: %v", err)
}

fmt.Println("数据写入 HBase 成功!")

// 关闭客户端连接
client.Close()
}

编译代码并打包上传

如果您当前的开发环境是 Linux 环境,请直接在命令行执行如下命令。
go build demo.go
如果是非 Linux 环境,请执行如下命令,打包成 linux 文件后,切换原来的环境,确保其他文件正常编译。
go env -w GOOS=linux
go build demo.go
在工程目录下能够看到编译得到的二进制文件 demo,将该文件通过 CVM 实例控制台中的上传文件功能上传到 CVM 客户机中。
若 CVM 客户机可以通过公网 IP 访问,也可以在本地命令行模式下运行以下命令上传文件。
scp $localfile root@公网IP地址:$remotefolder
其中,$localfile 是您的本地文件的路径加名称,root 为 CVM 服务器用户名,公网 IP 可以在 CVM 客户机控制台查看。$remotefolder 是您想存放文件的 CVM 服务器路径。上传完成后,在 CVM 客户机命令行中即可查看对应文件夹下是否有相应文件。

执行样例并查看结果

切换到该文件所在的目标目录下,赋予该二进制文件可执行权限并执行。
chmod +x demo
./demo
运行代码后,切换到 HBase shell 中通过 list 命令来查看使用 API 创建的 HBase 表是否成功,若成功可通过 scan 命令来查看表的具体内容。
hbase:001:0> list 'test2'
TABLE
test2
1 row(s)
Took 0.3814 seconds
=> ["test2"]
hbase:002:0> scan 'test2'
ROW COLUMN+CELL
my_row_key column=cf1:col1, timestamp=2024-07-17T21:16:49.302, value=value1
my_row_key column=cf1:col2, timestamp=2024-07-17T21:16:49.302, value=value2
1 row(s)
Took 0.1268 seconds
hbase:003:0> exit


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈