 Hbase基于Snapshot数据迁移
Hbase基于Snapshot数据迁移
  # HBase 基于 Snapshot 迁移
HBase 表基于 Hadoop HDFS 构建,因此迁移可以从两个维度进行:HDFS 层面的 distcp 迁移,以及 HBase 层面的工具迁移。本文将重点介绍推荐的 Snapshot 迁移方案。
 图 1. HBase 多种迁移方案
 图 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
