异常重现

1.1 删除表后用快照恢复不成功

查看当前表test2信息

scan ‘test2’




如何删除快照hbase hbase快照恢复_数据


在CM为test2创建一个快照test2_shot1


如何删除快照hbase hbase快照恢复_如何删除快照hbase_02


删除表test2,可以看到表已经被删除


如何删除快照hbase hbase快照恢复_删除表_03


用之前保存的快照恢复,异常如下,由于表不存在了,第一步检查表是否启用就出现异常。


如何删除快照hbase hbase快照恢复_数据_04


1.2 truncate清空表之后快照恢复不成功

同样,先查看表test3的数据

scan ‘test3’


如何删除快照hbase hbase快照恢复_数据_05


然后创建快照test3_shot1


如何删除快照hbase hbase快照恢复_命令行_06


清空表test3的数据

truncate ‘test3’


如何删除快照hbase hbase快照恢复_命令行_07


在CM从快照恢复,显示是恢复成功的,但是去表查询,发现数据是空的。


如何删除快照hbase hbase快照恢复_命令行_08


在命令行执行scan ‘test3’查询数据为空


如何删除快照hbase hbase快照恢复_删除表_09


而且现在再为test3来创建快照会失败,如下图


如何删除快照hbase hbase快照恢复_数据_10


异常分析

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’可以恢复成功

restore_snapshot ‘test2_shot1’scan ‘test2’


如何删除快照hbase hbase快照恢复_如何删除快照hbase_11


查询表数据,和之前的数据一致。

3.2 truncate清空表后快照恢复步成功解决办法

目前没有其他方法来解决,确认是属于CDH6.2.0的一个bug,等待后续版本修复。现阶段只能在快照的使用中避开引起异常的操作方式。

总结

本文所提出的两个HBase快照恢复的问题,都属于C6的bug。目前,在进行HBase快照操作的时候,请避开文中提出的引起异常的方式:做完快照后,如果是删除表可以使用后台命令的方式恢复,不要truncate清空表因为无法恢复。等待后续的CDH版本进行更新修复。