hbase设置ttl后出现坏块,重启后master abort 问题梳理

1. 查看日志,找到出错位置。

源码位置:hbase-0.94.11\src\main\java\org\apache\hadoop\hbase\master\AssignmentManager.java   1879

hbase设置ttl后出现坏块,重启后master abort 问题梳理

   可以看到,问题是由于把某个region进行transit过程中出现了错。

造成的原因很可能就是重新设置了ttl造成数据块中造成了部分损坏。

2.  既然数据块损坏,那么重启后mater为什么会起不来直接abort,从上面代码可以看到这属于源码的一个Bug,按理说数据块损坏,不应该影响mater的正常启动。

3. 因此调研了0.94.27版本,可以看到对此处进行了优化。

hbase设置ttl后出现坏块,重启后master abort 问题梳理

   在此版本中,当region在transition过程中出现了错误,但并不会影响master的正常启动。

4.  由于数据存储在hdfs中,hbase对于hdfs来说就是一个客户端,我们可以放心对hbase0.94.11备份,用0.94.27替换。

5. 替换后,用hbase自带的工具  hbfc 修复,可以看到损坏的region。

6. 通过hdfs界面,找到损坏的region对应的数据块,直接删除损坏的数据块。

7. 删除损坏的数据块后,再进行hbase的hbfc修复。

8. master成功启动。且可正常运行。

9. 由于删除hdfs的损坏数据块时,使用的hdfs自带的工具,在删除的同时也会删除namenode对应的元数据。

10. 但是hbase并不知道你删除了坏数据对应的region,因此你需要对hbase的.META.表进行修复,去掉损坏的region元数据,否则当有人访问此元数据对应的region会出错。

总结完毕

相关推荐