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

Posted dhname

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hbase设置ttl后出现坏块,重启后master abort 问题梳理相关的知识,希望对你有一定的参考价值。

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

  源码位置:hbase-0.94.11srcmainjavaorgapachehadoophbasemasterAssignmentManager.java   1879

  技术图片

 

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

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

 

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

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

  技术图片

 

   在此版本中,当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会出错。

 

总结完毕

 

以上是关于hbase设置ttl后出现坏块,重启后master abort 问题梳理的主要内容,如果未能解决你的问题,请参考以下文章

HBase的完全分布式的搭建与部署,以及多master

记一次服务器异常掉电,导致HBase Master is initializing 问题处理

记一次服务器异常掉电,导致HBase Master is initializing 问题处理

pinpoint 修改hbase表TTL值

Hbase RegionServerGroup配置重启后失效问题排查

hbase启动后HMaster几秒后死掉