hbase snapshot 快照方式数据迁移
前提
snapshot备份默认已开启(0.95版本之后默认开启,也可手动添加hbase-site.xml配置)
SnapShot 快照迁移流程
1.生成快照备份
snapshot 'device','device_snapshot01'
2.查看快照
list_snapshots hdfs
hadoop fs -ls hdfs://127.0.0.1:8020/hbase/.hbase-snapshot/
3.迁移、传输快照
// 参数说明 -snapshot 快照名称 -copy-from 快照源位置 -copy-to 快照目标位置 -mappers map数量、并行度 -bandwidth 传输带宽
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot device_snapshot01 \
-copy-from hdfs://127.0.0.1:8020/hbase \
-copy-to hdfs://127.0.0.2:8020/hbase \
-mappers 16 \
-bandwidth 1024
4.目标集群查看快照迁移是否成功
5.恢复数据
disable 'device'
restore_snapshot 'device_snapshot01'
enable 'device'
clone_snapshot 'device_snapshot01','device_new'
SnapShot迁移问题记录
错误日志(一):
Can’t find hfile: 643c8e0f85e5487982241077ae245f34 in the real directory for the primary table. 或 Hfile文件不存在等FileNotFoundException
问题原因:
该问题的原因是从源集群复制过来的文件在目标集群上不存在,检查目标集群,可发现目标集群的NameNode上有出现未找到的文件,也就是说文件原来是存在的,但过程中又被删除了
解决方案:
CleanerChore线程清理archive目录是通过hbase-site.xmll配置项hbase.master.hfilecleaner.ttl控制的,默认是5分钟(单位:毫秒),大表的文件迁移远超5分钟。调到两小时以上的足够大值。 (迁移时可能需要分别修改新旧两个集群环境配置;失败后可删除.snapshot/.tmp/下快照文件重试)
错误日志(二):
org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block hadoop集群的datanode节点出现宕机
问题原因:
创建快照超时
解决方案:
(hbase-site.xml添加并调整以下参数) hbase.snapshot.region.timeout hbase.snapshot.master.timeoutMillis
补充
表压缩 :major_compact 压缩整个区域(region)(可单独压缩列、列族) :major_compact ‘table’ 刷新表(将mem中缓存刷入Hfile) :flush ‘table’
此外可能还会有 no such file 等问题,后续在Hbase专栏将单独说明~
|