从 HBase 复制到 Bigtable
Cloud Bigtable HBase 复制库是开源 Java 版 Cloud Bigtable HBase 客户端的一个组件。借助此复制库,您可以使用 HBase 复制服务异步将数据从 HBase 集群复制到 Bigtable 实例。如需查看自述文件和源代码,请访问 GitHub 代码库。
使用场景
- 在线迁移到 Bigtable - 您可以使用 Bigtable HBase 复制库,结合了 离线迁移现有 HBase 数据、从 HBase 迁移到 Bigtable,几乎无需停机。
- 数据恢复 - 通过复制 HBase 数据传输到站外 Bigtable 实例。
- 集中数据集 - 使用库将数据从多个位置的 HBase 集群复制到自动处理其集群之间的复制的单个 Bigtable 实例。
- 扩展 HBase 占用空间 - 复制到其集群位于当前 HBase 位置以外的其他位置的 Bigtable 实例。
概览
Bigtable HBase 复制库扩展了基础 HBase 复制服务。写入 HBase 集群的数据会异步复制到 Bigtable 实例,方式与标准 HBase 复制服务将数据复制到其他 HBase 集群的方式相同。该库使用源 HBase 集群的预写式日志 (WAL) 将更改推送到 Bigtable 实例。
您可以将整个 HBase 集群复制到 Bigtable 或 仅复制特定表或列族。换句话说,集群、表或列族级会启用 HBase 复制功能。
从 HBase 复制到 Bigtable 具有最终一致性。
迁移到 Bigtable
借助 Bigtable HBase 复制库,您无需暂停应用即可迁移到 Bigtable。
概括来讲,从 HBase 在线迁移到 Bigtable 的步骤如下所示。请参阅 README 了解详情。
- 在开始之前,按照设置和配置步骤操作。
- 在 HBase 集群上启用复制功能。
- 将 Bigtable 复制端点添加为对等端。
- 停用 Bigtable 对等端。此操作会使从停用时开始向 HBase 写入的数据在 HBase 集群上进行缓冲。
- 一旦开始缓冲开始捕获新的写入操作,请按照 离线迁移指南 迁移现有 HBase 数据的快照。
- 离线迁移完成后,重新启用 Bigtable 对等端以使缓冲区排空并在 Bigtable 重放写入的数据。
- 缓冲区排空后,重启应用以将请求发送到 Bigtable。
设置和配置复制库
您需要先完成本部分中的任务,然后才能使用 Bigtable HBase 复制功能。
配置身份验证
为了确保复制库有写入权限 Bigtable 按照 创建服务账号。 分配角色 roles/bigtable.user 新创建的服务账号
接下来,将以下内容添加到整个 HBase 集群中的 hbase-site.xml
文件。
<property>
<name>google.bigtable.auth.json.keyfile</name>
<value>JSON_FILE_PATH</value>
<description>
Service account JSON file to connect to Cloud Bigtable
</description>
</property>
将 JSON_FILE_PATH
替换为指向您下载的 JSON 文件的路径。
如需了解您可以设置的其他属性,请参阅 HBaseToCloudBigtableReplicationConfiguration。
创建目标实例和表
请先创建 Bigtable 实例,然后才能从 HBase 复制到 Bigtable。Bigtable 实例可以有一个集群或多个集群以多主方式运行。来自 HBase 复制服务的请求会路由到 Bigtable 实例中最近的集群,然后会复制到该实例中的其他集群。
Bigtable 目标表需要具有与 HBase 表相同的名称和列族。如需了解使用 Bigtable Schema Translation 工具创建与 HBase 表具有相同架构的表的分步说明,请参阅创建目标表。即使您要复制数据,而不是导入数据,步骤都是相同的。
设置配置属性
将以下内容添加到整个 HBase 集群中的 hbase-site.xml
。
<property>
<name>google.bigtable.project.id</name>
<value>PROJECT_ID</value>
<description>
Bigtable project ID
</description>
</property>
<property>
<name>google.bigtable.instance.id</name>
<value>INSTANCE_ID</value>
<description>
Bigtable instance ID
</description>
</property>
<property>
<name>google.bigtable.app_profile.id</name>
<value>APP_PROFILE_ID</value>
<description>
Bigtable app profile ID
</description>
</property>
替换以下内容:
PROJECT_ID
:Bigtable 实例所在的 Google Cloud 项目。INSTANCE_ID
:您要将数据复制到的 Bigtable 实例的 ID。APP_PROFILE_ID
:用于连接到 Bigtable 的应用配置文件的 ID。
安装复制库
如需使用 Bigtable HBase 复制库,您需要在 HBase 集群中的每个服务器上安装该库。使用与您的 HBase 版本(1.x 或 2.x)对应的复制库版本。
下载 JAR
如需获取此复制库,请在 HBase shell 中运行以下命令。
wget BIGTABLE_HBASE_REPLICATION_URL
将 BIGTABLE_HBASE_REPLICATION_URL
替换为包含复制库的 Maven 制品库中提供的依赖项的最新 JAR 的网址。文件名类似于 https://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-replication/1.0.0/bigtable-hbase-1.x-replication-1.0.0-jar-with-dependencies.jar
。
如需查找该网址或手动下载 JAR,请执行以下操作:
- 前往您使用的 HBase 版本对应的复制库制品库。
- 点击最新的版本号,例如
1.0.0
。 - 找到 jar-with-dependencies 文件(通常位于顶部)。
- 右键点击并复制网址,或点击以下载该文件。
安装 JAR
在每个 HBase 服务器(包括主服务器和区域服务器)上,复制该文件
HBase 类路径下的某个文件夹中。例如,您可以将文件复制到 /usr/lib/hbase/lib/
。
添加 Bigtable 对等端
如需从 HBase 复制到 Bigtable,您需要将 Bigtable 端点添加为复制对等端。
- 重启 HBase 服务器,以确保复制库已加载。
- 在 HBase shell 中运行以下命令。
add_peer PEER_ID_NUMBER, ENDPOINT_CLASSNAME =>
'com.google.cloud.bigtable.hbaseHBASE_VERSION_NUMBER_x.replication.HbaseToCloudBigtableReplicationEndpoint`
替换以下内容:
PEER_ID_NUMBER
:Bigtable 复制对等端的整数 ID。如需仅对选定表启用 HBase 复制功能,请使用add_peer
可选参数。HBASE_VERSION_NUMBER
:您使用的 HBase 版本的数量。对于 HBase 1.x,请使用1
;对于 HBase 2.x,请使用2
。(不支持 HBase 3.x。)