1 异常重现

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

查看当前表test2信息

scan ‘test2’

hbase master down机后恢复_删除表

在CM为test2创建一个快照test2_shot1

hbase master down机后恢复_github_02

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

hbase master down机后恢复_删除表_03

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

hbase master down机后恢复_数据_04

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

同样,先查看表test3的数据

scan ‘test3’

hbase master down机后恢复_数据_05

然后创建快照test3_shot1

hbase master down机后恢复_删除表_06

清空表test3的数据

truncate ‘test3’

hbase master down机后恢复_删除表_07

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

hbase master down机后恢复_删除表_08

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

hbase master down机后恢复_数据_09

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

hbase master down机后恢复_数据_10

2 异常分析

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 异常解决

3.1 删除表后快照恢复不成功解决办法

直接在HBase shell命令行用restore_snapshot ‘test2_shot1’可以恢复成功

restore_snapshot ‘test2_shot1’
scan ‘test2’

hbase master down机后恢复_github_11

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

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

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

4 总结

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