hbase snapshot 快照方式数据迁移

前提

snapshot备份默认已开启(0.95版本之后默认开启,也可手动添加hbase-site.xml配置)

SnapShot 快照迁移流程

1.生成快照备份

// device 是table的名字,‘device_snapshot01’是备份快照名称
snapshot 'device','device_snapshot01'

2.查看快照

// Hbase中查看已经创建的快照
list_snapshots hdfs
// Hdfs中存储的 Hbase快照地址
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专栏将单独说明~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐