由MasterProcWals状态日志过多导致的HBase Master重启失败问题

1 文档编写目的

本文主要讲述如何解决由MasterProcWals状态日志过多导致的HBase Master重启失败问题。

测试环境:

操作系统版本为Redhat7.2

CM和CDH版本为5.13.1

文章目录结构:

1. 文档编写目的

2. 问题描述

3. 解决方案

3.1 问题解决

3.2 相关建议

4. 总结

2 问题描述

由于某些已知存在的问题,会导致MasterProcWals状态日志过多,如果重启HBase Master,可能会导致HBase Master启动失败。因为HBase Master进入活动状态需要读取并实例化所有正在运行的程序当前记录在/hbase/MasterProcWALs/目录下对应的文件。如果此文件夹太大,HBase Master将在完全变为活动状态之前超时并崩溃。

问题特征:

1、HBase Master 重启失败前,会打印出类似的日志:

2018-07-07 17:43:08,619 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recover lease on dfs filehdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084815.log2018-07-07 17:43:08,619 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084815.logafter 0ms2018-07-07 17:43:08,624 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recover lease on dfs filehdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084816.log2018-07-07 17:43:08,625 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084816.logafter 1ms2018-07-07 17:43:08,630 INFO org.apache.hadoop.hbase.util.FSHDFSUtils:Recover lease on dfs filehdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084859.log2018-07-07 17:43:08,630 INFOorg.apache.hadoop.hbase.util.FSHDFSUtils: Recovered lease, attempt=0 onfile=hdfs://nameservice1/hbase/MasterProcWALs/state-00000000000000084859.logafter 0ms2018-07-07 17:43:08,678 FATALorg.apache.hadoop.hbase.master.HMaster: Failed to become active masterjava.lang.NullPointerException

2、查看HBase Master日志,还能看到如下信息:

2018-07-07 17:43:38,978 WARN org.apache.hadoop.hdfs.BlockReaderFactory:I/O error constructing remote block reader. java.net.SocketException: Too manyopen files

3、通常你能够在/hbase/MasterProcWALs目录下看到大量的日志文件,并且这些日志文件占用HDFS存储空间总和可能已经达到TB级别了。可以通过如下命令查看/hbase/MasterProcWALs目录占用HDFS存储空间大小:

hdfs dfs -du -s -h /hbase/MasterProcWALs

注:执行该命令后,我的/hbase/MasterProcWALs目录大小将近10 TB(不含副本)

3 解决方案

3.1 问题解决

该问题主要和HBase某个分支的实现方式有关,据说已经重新设计了该实现方式,新的实现方式能够避免该问题,将在CDH 6中应用。

如果出现由MasterProcWals状态日志过多导致的HBase Master重启失败问题建议先将/hbase/MasterProcWALs目录下的所有文件备份,然后删除/hbase/MasterProcWALs目录下的所有文件,重启HBase Master即可解决问题。

3.2 相关建议

建议启用HBase Master 日志清除器插件,定时清理日志。

目前默认配置的清除器插件有ReplicationLogCleaner、SnapshotLogCleaner和TimeToLiveLogCleaner这三种:

  • ReplicationLogCleaner:如果有跨集群数据同步的需求,通过该Cleaner来保证那些在同步中的日志不被删除;
  • SnapshotLogCleaner:被表的snapshot使用到了的wal不被删除;
  • TimeToLiveLogCleaner:日志文件最后修改时间在配置参数{hbase.master.logcleaner.ttl默认600秒}之前的可以删除。

4 总结

1、如果MasterProcWals状态日志过多,那么重启HBase Master,可能会导致HBase Master启动失败。目前临时的解决方案是备份/hbase/MasterProcWALs目录下的所有文件后,删除该目录下所有文件并重启HBase Master。

2、建议定时清理MasterProcWals状态日志,可以通过HBase自带的清理器插件处理,也可以自己开发日志清理插件,按要求添加到HBase的classpath 中。

参考文章:

https://blog.csdn.net/u010039929/article/details/74330722


When your talent can’t support your ambition, You should calm down and learn. When your ability cannot realize you dreams, You should practice with all your heart. Ask yourself, What kind of life you pursue.

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件工程师成长笔记

Linux下开启FTP的21端口

这几天一直在学习在CentOS7.0创建本地yum源和局域网yum源,准备两台CentOS7.0虚拟机,一个做服务器,一个做客户端;由于开发环境只有局域网,没法...

6K20
来自专栏hbbliyong

Intellij IDEA 使用Spring-boot-devTools无效解决办法

相信大部分使用Intellij的同学都会遇到这个问题,即使项目使用了spring-boot-devtools,修改了类或者html、js等,idea还是不会自动...

29350
来自专栏破晓之歌

Redis安装和初步使用 原

获取安装包:https://github.com/MSOpenTech/redis

25520
来自专栏蓝天

thrift使用小记

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL...

18110
来自专栏酷玩时刻

Android依赖管理与私服搭建

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 *本篇文章视频 慕课网之Android依赖管理与私服搭建

18150
来自专栏pangguoming

CentOS查询端口占用和清除端口占用的程序

14350
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Icinga监视主机和服务

Icinga是一个开源监控系统,用于监控网络主机和服务的运行状况。在本教程中,我们将使用Icinga设置两种不同类型的监视配置。第一种是基于对主机外部服务的简单...

16510
来自专栏JetpropelledSnake

SNMP学习笔记之Linux下安装和配置SNMP

  选择一个SNMP版本,比如5.7.1,下载地址如下:http://sourceforge.net/projects/net-snmp/files/net-s...

28730
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Deployer自动部署Laravel应用程序

Laravel是一个开源的PHP Web框架,旨在使常见的Web开发任务(如身份验证,路由和缓存)变得更加容易。Deployer是一个开源的PHP部署工具,为许...

38410
来自专栏电光石火

Nexus3.x安装及配置

1.8K60

扫码关注云+社区

领取腾讯云代金券