zoukankan      html  css  js  c++  java
  • 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会出错。

    总结完毕

  • 相关阅读:
    Python 操作Redis 转载篇
    Django运行SQL语句
    将博客搬至CSDN
    MySQL学习(三)函数
    MySQL学习(二)数据类型
    MySQL学习(一) 数据表基本操作
    Django聚合函数
    windows平台上编译mongdb-cxx-driver
    小程序登陆遇到 ERR_REQUEST_PARAM
    Opengrok服务器搭建step by step
  • 原文地址:https://www.cnblogs.com/dhName/p/12805590.html
Copyright © 2011-2022 走看看