ITPub博客

首页 > 大数据 > Hadoop > Hbase master gone 系统崩溃. 遭遇 hbase bug 以及对应的解决方案.

Hbase master gone 系统崩溃. 遭遇 hbase bug 以及对应的解决方案.

原创 Hadoop 作者:babyyellow 时间:2019-05-23 15:20:43 0 删除 编辑


hbase   双master  架构,  挂掉了. 


master  无法转为active了 . 整个系统重启多次 爆同样的错误. 


2019-05-21 14:50:55,189 WARN  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: attempt=3 on file=hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000026244.log after 73101ms
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): Failed to RECOVER_LEASE /hbase/MasterProcWALs/state-00000000000000026244.log for DFSClient_NONMAPREDUCE_-23587253_1 on 192.168.8.52 because the file is under construction but no leases found.


发现 
/hbase/MasterProcWALs
下面很多文件 

已经很久了. 这个目录下面一共有1800多个文件. 

这些文件都是0 长度的. 




最后重启hdfs . 

重启zookeep 

然后重启 hbase  问题解决. 

但是奇怪的事情发生了.

上面目录里的文件都消失了. 

系统启动后, 从日志里去找点东西出来看看: 


2019-05-21 15:31:12,843 INFO  [hadoop-8-51:16000.activeMasterManager] procedure.ZKProcedureUtil: Clearing all procedure znodes: /hbase/online-snapshot/acquired /hbase/online-snapshot/reached /hbase/online-snapshot/abort
2019-05-21 15:31:12,852 INFO  [hadoop-8-51:16000.activeMasterManager] procedure.ZKProcedureUtil: Clearing all procedure znodes: /hbase/flush-table-proc/acquired /hbase/flush-table-proc/reached /hbase/flush-table-proc/abort
2019-05-21 15:31:12,879 INFO  [hadoop-8-51:16000.activeMasterManager] master.MasterCoprocessorHost: System coprocessor loading is enabled
2019-05-21 15:31:12,892 INFO  [hadoop-8-51:16000.activeMasterManager] procedure2.ProcedureExecutor: Starting procedure executor threads=25
2019-05-21 15:31:12,893 INFO  [hadoop-8-51:16000.activeMasterManager] wal.WALProcedureStore: Starting WAL Procedure Store lease recovery
2019-05-21 15:31:13,016 INFO  [hadoop-8-51:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000026244.log


这些文件都被执行了一次恢复操作. 

是什么问题导致的这些标志文件 , 

集群是主从两个master 的. 一直都监控运行.  系统稳定性良好. 

故障切换也没有问题. 


在网上找到了一篇 详细的关于hdfs 文件恢复的帖子: 

https://blog.cloudera.com/blog/2015/02/understanding-hdfs-recovery-processes-part-1/  







master  在8.51上的时候, 发现 多了很多这个文件. 

然后web 页面看到 很多 region in tracsaction  也就是spli 失效了. 

 然后手动切换到 8.52   

这些文件就消失了. 

同时在 8.52 上 日志里看到了修复这些文件的日志. 


2019-05-23 09:43:48,423 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028058.log
2019-05-23 09:43:48,435 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: recoverLease=true, attempt=0 on file=hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028058.log after 12ms
2019-05-23 09:43:48,470 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028059.log
2019-05-23 09:43:48,471 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: recoverLease=true, attempt=0 on file=hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028059.log after 1ms
2019-05-23 09:43:48,493 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028060.log


也就是 只要适当的安排  master  的相互切换.  


其实既可以规避这个问题. 



发现HBASE 的一个bug . 


https://issues.apache.org/jira/browse/HBASE-14712


修复版本 1.2.0   . 



问题出在 这个

 /hbase/MasterProcWALs   下面的日志太多了 . 

然后 在master 变成 active 之前,   需要回复这些文件. 

当这些文件太多的时候,  在想namenode 请求信息的时候. 

导致 tcp  buffer 满了.  

然后对namenode 形成了事实上的ddos 攻击.  

然后master 超时下线了. 

所以启动不了. 

重启 集群就可以了. 


或者让这个目录下面的文件数不要太多. 



------------------   解决方案 ------------------



如果 暂时无法执行版本升级. 


那么 可以周期性的切换 master  来规避这个问题. 






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-2645305/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
oracle MySQL Postgresql 专职数据库dba。 系统架构师。 mysql 官方认知dba 。 15年专职dba 经验。

注册时间:2010-12-02

  • 博文量
    249
  • 访问量
    1476772