从 HBase 复制到 Bigtable

Cloud Bigtable HBase 复制库是开源 Java 版 Cloud Bigtable HBase 客户端的一个组件。借助此复制库,您可以使用 HBase 复制服务异步将数据从 HBase 集群复制到 Bigtable 实例。如需查看自述文件和源代码,请访问 GitHub 代码库

使用场景

  • 在线迁移到 Bigtable - 您可以结合使用 Bigtable 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 的步骤如下所示。如需了解详情,请参阅自述文件

  1. 在开始之前,按照设置和配置步骤操作。
  2. 在 HBase 集群上启用复制功能。
  3. 将 Bigtable 复制端点添加为对等端
  4. 停用 Bigtable 对等端。此操作会使从停用时开始向 HBase 写入的数据在 HBase 集群上进行缓冲。
  5. 缓冲开始捕获新写入的数据后,按照离线迁移指南迁移现有 HBase 数据的快照。
  6. 离线迁移完成后,重新启用 Bigtable 对等端以使缓冲区排空并在 Bigtable 重放写入的数据。
  7. 排空缓冲区后,请重启应用以向 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,请执行以下操作:

  1. 前往您使用的 HBase 版本对应的复制库制品库。
  2. 点击最新的版本号,如 1.0.0
  3. 找到 jar-with-dependencies 文件(通常位于顶部)。
  4. 右键点击并复制网址,或点击以下载该文件。

安装 JAR

在每个 HBase 服务器(包括主服务器和区域服务器)上,将您刚刚下载的文件复制到 HBase 类路径下的一个文件夹中。例如,您可以将文件复制到 /usr/lib/hbase/lib/

添加 Bigtable 对等端

如需从 HBase 复制到 Bigtable,您需要将 Bigtable 端点添加为复制对等端。

  1. 重启 HBase 服务器,以确保复制库已加载。
  2. 在 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。)

后续步骤