Hbase基于Snapshot数据迁移
# HBase 基于 Snapshot 迁移
HBase 表基于 Hadoop HDFS 构建,因此迁移可以从两个维度进行:HDFS 层面的 distcp
迁移,以及 HBase 层面的工具迁移。本文将重点介绍推荐的 Snapshot 迁移方案。
图 1. HBase 多种迁移方案
基于 Snapshot 的迁移具有快速、可靠的优势,尤其在跨集群操作时效率更高。以下是基于 Snapshot 的具体迁移步骤。
# 迁移步骤
# 1. 在新集群上创建与原集群表结构一致的表
首先,在目标集群中手动创建与源集群中相同的表结构。这确保在恢复 Snapshot 时,表能正确匹配。
# 2. 在源集群中创建快照
使用 HBase Shell,在源集群中创建当前表的快照。
$ ./bin/hbase shell
hbase> snapshot 'myTable', 'myTableSnapshot'
1
2
2
'myTable'
是 HBase 表名'myTableSnapshot'
是快照名称
你可以使用 list_snapshots
命令查看创建的快照,也可以通过 delete_snapshot
删除快照:
hbase> list_snapshots
hbase> delete_snapshot 'myTableSnapshot'
1
2
2
# 3. 导出快照到目标集群
使用 ExportSnapshot
工具,将快照从源集群导出到目标集群的 HDFS 中。
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot myTableSnapshot \
-copy-to hdfs://10.0.0.38:4007/apps/hbase/data/temp_snapshot/myTableSnapshot
1
2
3
2
3
hdfs://10.0.0.38:4007
是源集群的fs.defaultFS
值(在core-site.xml
文件中可找到)-copy-to
指定目标快照存储位置,如:${hbase.rootdir}
/temp_snapshot/{快照名称}
此时,系统将启动一个 MapReduce 任务,导出大数据量时,可以通过增加 -mappers 16 -bandwidth 200
指定 mapper 数量和带宽(例如 200MB/sec)。
# 4. 将快照同步到目标集群的 HDFS
在目标集群中执行如下命令,将快照数据从 HDFS 复制到 HBase 的 rootdir 目录中:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot myTableSnapshot \
-copy-from /apps/hbase/data/temp_snapshot/myTableSnapshot \
-copy-to /hbase/
1
2
3
4
2
3
4
-copy-from
表示快照在源集群的存储位置-copy-to
表示目标集群中 HBase 的 rootdir 目录
注意: 完成复制后,需要检查目标集群中 HDFS 目录的权限。如果所有者是 hdfs
,需要修改为 hbase
,否则会在恢复时遇到权限问题:
hdfs dfs -chown -R hbase /apps/hbase/data
1
# 5. 删除临时快照存储目录
hdfs dfs -rmr /apps/hbase/data/temp_snapshot/myTableSnapshot
1
# 5. 恢复快照至 HBase 表
禁用目标集群中的目标表,然后使用快照恢复数据:
hbase> disable 'myTable'
hbase> restore_snapshot 'myTableSnapshot'
hbase> enable 'myTable'
1
2
3
2
3
# 6. 测试恢复的表数据
最后,可以通过一些简单的 HBase 表操作测试恢复是否成功,确保数据和结构一致。
上次更新: 2024/09/27, 21:00:17