HBase 数据迁移实践

最近更新时间:2025-08-01 17:55:02

我的收藏

适用范围

将客户自建 HBase 集群,或其它云厂商兼容开源 HBase 的集群迁移至腾讯云 EMR HBase 上。

方案概述


如上图所示,HBase 实时数据可以通过 Replication 迁移,离线数据迁移支持多种方案,其中基于 Snapshot 的迁移是推荐的迁移方案。

离线数据 Snapshot 迁移

说明:
以下步骤中,在目标 EMR 集群上执行的命令,均需使用 Hadoop 用户执行。
1. 在目标集群创建与源集群结构相同的表。
hbase shell
hbase> create 'myTable', 'cf1', 'cf2'
2. 在源集群上写入测试数据。
hbase shell
hbase> put 'myTable', 'row1', 'cf1:a', 'value1'
hbase> put 'myTable', 'row2', 'cf2:b', 'value2'

hbase> scan 'myTable'
ROW COLUMN+CELL row1 column=cf1:a, timestamp=2023-08-09T16:43:10.024, value=value1 row2 column=cf2:b, timestamp=2023-08-09T16:43:20.036, value=value2
3. 使用 hbase shell 在原始集群中创建一个快照。
hbase shell
hbase>snapshot 'myTable', 'myTableSnapshot'
这里 'myTable' 是 hbase 的表名,'myTableSnapshot' 是快照的名称。
创建完成后可使用 list_snapshots 确认快照是否生成,或使用 delete_snapshot 删除快照。
hbase> delete_snapshot 'myTableSnapshot'
4. 在源集群中导出快照到目标集群。
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot myTableSnapshot -copy-to hdfs://​​<目标集群 Active NameNode>:<RPC 端口>/hbase/snapshot/myTableSnapshot
说明:
1. ​​<目标集群 Active NameNode>:<RPC 端口> 是目标集群的 active NameNode 和 rpc 端口,导出快照时系统级别会启 MapReduce 的任务,可以在后面增加 -mappers 16 -bandwidth 200 来指定 mapper 和带宽。其中200指的是200MB/sec,参数具体值可以根据实际情况来进行调整。
2. 如果目标端集群 HDFS 上存在 /hbase 目录,通过可直接将快照导出到目标集群 /hbase 目录下,无需执行后续步骤 5 的拷贝步骤。
5. 快照还原到目标集群的目标 HDFS,在目标集群中执行如下命令。
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot myTableSnapshot -copy-from /hbase/snapshot/myTableSnapshot -copy-to /hbase/
6. 在目标集群从 HDFS 恢复相应的 HBase 表及数据。
hbase> disable "myTable"
hbase> restore_snapshot 'myTableSnapshot'
hbase> enable 'myTable'
7. 最后,可通过 HBase Shell 执行简单查询验证数据是否迁移成功。

实时数据同步 Replication

1. 在目标集群上建立表结构一样的表。
hbase shell
hbase> create 'myTable', 'cf1', 'cf2'
2. 源集群修改表列簇的 REPLICATION_SCOPE 属性为1,其中 TestTable,info 需要修改为源集群的表和列簇。
hbase shell
alter 'TestTable',{NAME => 'info',REPLICATION_SCOPE => 1 }
3. 源集群建 Replication 链路。
add_peer '1', CLUSTER_KEY =>"<目标集群 ZK 地址>:2181:/hbase",TABLE_CFS => { "TestTable" => [] }
说明:
该命令在源集群执行。
多个表建立 Replication 时通过逗号拼接,TABLE_CFS => { "TestTable" => [] ,"namespace1:table1"=>[]},其中 <目标集群 ZK 地址>:2181:/hbase 需要替换为目标集群的 ZK 地址和 HBase ZK 路径。
执行 status 'replication',观察 Replication Lag 值。若该值小于 10000 且未持续增长,通常表示同步正常(具体阈值需根据业务需求调整)。

离线 Snapshot 和 实时数据同步 Replication 结合使用

说明:
离线 Snapshot 和 实时数据同步 Replication 结合使用时,要先开启实时数据同步,然后暂停 Replication,Snapshot 完成后再开启实时数据同步
过程中 hbase oldWALs 目录下会堆积实时数据。
1. 按照文档上述步骤完成实时数据同步 Replication 的配置。
2. 源集群暂停 Replication。
hbase shell
disable_peer '1'
说明:
该命令在源集群执行。
3. 按照文档上述步骤完成离线数据 Snapshot 迁移。
4. 迁移完成后恢复 Replication。
hbase shell
enable_peer '1'
说明:
该命令在源集群执行。
执行 status 'replication' ,观察其中的 Replication Lag,该值会一直减小,如果该值小于10000 同时没有持续增大,则说明同步已正常。
5. 迁移完成后,删除 Replication。
remove_peer '1'
说明:
该命令在源集群执行。

FAQs

Replication Lag 持续增大?

若 Replication Lag 持续增大,请检查源集群 RegionServer 日志,排查网络或配置问题。