异常重现
1.1 删除表后用快照恢复不成功
查看当前表test2信息
代码语言:javascript复制scan ‘test2’
在CM为test2创建一个快照test2_shot1
删除表test2,可以看到表已经被删除
用之前保存的快照恢复,异常如下,由于表不存在了,第一步检查表是否启用就出现异常。
1.2 truncate清空表之后快照恢复不成功
同样,先查看表test3的数据
代码语言:javascript复制scan ‘test3’
然后创建快照test3_shot1
清空表test3的数据
代码语言:javascript复制truncate ‘test3’
在CM从快照恢复,显示是恢复成功的,但是去表查询,发现数据是空的。
在命令行执行scan ‘test3’查询数据为空
而且现在再为test3来创建快照会失败,如下图
异常分析
2.1 删除表后快照恢复不成功分析
这个问题是由于CDH6.2.0上在进行HBase Snapshot Restore的过程中,会先进行is_enabled的操作。但假如这个表是已经被drop掉的情况下,会报表不存在。这会导致我们在CDH6.2.0上无法进行下一步的restore的操作。
再一步经过确认后,确定是hbase.sh文件导致。这个是CDH6.2.0的一个bug,等待后续版本修复。
2.2 truncate清空表后快照恢复不成功分析
这个也是CDH6.2.0的一个bug,等待后续版本修复。
异常解决
3.1 删除表后快照恢复不成功解决办法
直接在HBase shell命令行用restore_snapshot ‘test2_shot1’可以恢复成功
代码语言:javascript复制restore_snapshot ‘test2_shot1’
scan ‘test2’
查询表数据,和之前的数据一致。
3.2 truncate清空表后快照恢复步成功解决办法
目前没有其他方法来解决,确认是属于CDH6.2.0的一个bug,等待后续版本修复。现阶段只能在快照的使用中避开引起异常的操作方式。
总结
本文所提出的两个HBase快照恢复的问题,都属于C6的bug。目前,在进行HBase快照操作的时候,请避开文中提出的引起异常的方式:做完快照后,如果是删除表可以使用后台命令的方式恢复,不要truncate清空表因为无法恢复。等待后续的CDH版本进行更新修复。