hadoop 动态设置调整日志级别

Hadoop急诊室的半小时:动态设置调整日志级别

技术
大数据蜗牛

2015.02.03

本文通过一个在实际工作中所遇到的线上问题来告诉广大数据从业者一条通俗有用的人生哲理:线上遇到这样的问题,千万要冷静,越是着急越容易出乱子!心急吃不了热豆腐。

十万火急

上周二,朋友公司的Hadoop集群服务不可用,从早上9点开始一直持续到12点。业务方催得比较急,希望尽快恢复,至少给个可以恢复的时间点。这种心情做过线上服务运维的同学应该都能理解。特别是在没有任何思路的情况下,就只能干着急!

症状了解

朋友联系我,咨询了下具体症状为namenode启动过程中,一直打印如下log:

这个情况以前也没遇到过,询问了下当前使用的版本是2.4.0,看log 是info 级别,判断数据应该没什么问题。

查阅资料

这种问题一般直接google hadoop jira

打开第一个链接,搜索关键字: does not belong to any file

大致浏览发现与https://issues.apache.org/jira/browse/HDFS-7503 描述现象类似

大体上讲如果在删除大量文件之后立即重启集群,会因大量打印游离块信息,namenode很长一段时间都会在安全模式之下,导致namenode长时间不可用。这个问题将在2.6.1和1.3.0的版本中被修复。

信息确认

跟朋友确认了一下,确实在前一天有大批量删除文件的操作,删除的文件数高达700多W之多。大概能确定情况和这个jira 提到的一致。粗略估计了若每秒打印100条info log,那么700多W大概需要1天的时间才能打印完成。最直接的解决方法就是降低日志级别。

操作:动态设置调整日志级别

不重启降低namenode的log级别,打开http://{your_namenode_ip}:50070/logLevel

查看源码,找到打印这个log的类的全路径,输入

org.apache.hadoop.hdfs.server.blockmanagement.BlockManager查看log级别为INFO,将其设置成“WARN”,查看namenode的最新log,没有变化,等待一会,依然持续打印,问题没有解决。

判断应该是log类别没有调对,继续查看打印这段log的源码:

具体打印log的是blockLog

实际上对应的log类别应该是:BlockStateChange ! 其实从打印出来日志就可以看出来的。

在Log中输入”BlockStateChange”,Level输入”WARN“,然后点击”Set log level”按钮。

查看namenode log ,log马上停止,不过还打印其他信息,确认生效,等待2-3分钟,log恢复正常。

测试能正常上传下载数据,确认各项指标都正常,集群恢复可用。整个修复过程耗时半个小时。

线上遇到这样的问题,千万要冷静,越是着急越容易出乱子!

(来源:平民大数据)

时间: 2024-10-01 07:02:21

hadoop 动态设置调整日志级别的相关文章

Log4cpp配置文件及动态调整日志级别的方法

一.log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下: 提供应用程序运行上下文,方便跟踪调试: 可扩展的.多种方式记录日志,包括命令行.文件.回卷文件.内存.syslog服务器.Win事件日志等: 可以动态控制日志记录级别,在效率和功能中进行调整: 所有配置可以通过配置文件进行动态调整: 多语言支持,包括Java(log4j),C++(log4cpp.log4cplus),C(log4c),python(log4p)等: 二.原

基于JMX动态配置Log4J日志级别

先来看比较low的修改日志级别的方式,在写程序里面. http://blog.gssxgss.me/java%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E6%94%B9%E5%8F%98%E6%97%A5%E5%BF%97%E7%BA%A7%E5%88%AB/ 再来通过JMX的方法动态修改程序的日志级别. https://blog.csdn.net/z2007130205/article/details/23910431 package com.m

设置Spark日志级别

编辑Spark中conf中配置文件log4j.properties 设置日志级别为WARN,即:log4j.rootCategory=WARN, console 原文地址:https://www.cnblogs.com/zhangtianyuan/p/8384246.html

log4j动态日志级别调整

1. 针对root logger的设置 log4j.rootLogger=INFO, CONSOLELogger.getRootLogger().setLevel(org.apache.log4j.Level.DEBUG) 2. 针对Appender的Appender设置 log4j.appender.CONSOLE.Threshold=DEBUG((org.apache.log4j.ConsoleAppender)Logger.getRootLogger().getAppender("CONS

使用Apache pdfbox: 从Linux安装字体到log4j设置日志级别

在使用Apache的pdfbox的过程中,因为Linux环境下没有STSong-Light字体而报警告信息 (PDCIDFontType0.java:147) - Using fallback UKaiCN for CID-keyed font STSong-Light 搜索得知此为Adobe推出的一种OpenType字体,在adobe的安装目录下找到了疑似的字体AdobeSongStd-Light.otf,将此文件copy至Linux的/usr/share/fonts目录中,因为pdfbox会

log4j2和logback动态修改日志级别工具类

工作中,有些场景需要动态修改线上日志记录器的打印日志级别, 本文的两个工具类使用的版本如下: ----------------logback--------------------- <dependency>   <groupId>ch.qos.logback</groupId>   <artifactId>logback-core</artifactId>   <version>1.1.8</version></d

Apollo配置中心动态刷新日志级别

Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @date: 2019/1/21:下午5:00 */ @Configuration public class LogListenerConfig { private static final Logger logger = LoggerFactory.getLogger(LoggerConfigurati

动态设置日志级别

设置包的日志等级 Level level = Level.toLevel(Level.DEBUG);Logger logger = LogManager.getLogger(“package”);logger.setLevel(level); 设置全局日志等级 Level level = Level.toLevel(Level.DEBUG); 动态设置日志级别

SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)

1.概念:SpringBoot整合Restful架构 2.背景 Spring 与 Restful 整合才是微架构的核心,虽然在整个 SpringBoot(SpringCloud)之中提供有大量的服务方便整合,但是这些 整合都不如 Rest 重要,因为 Rest 是整个在微架构之中进行通讯的基础模式.那么对于 Rest 首先必须对其有一个最为核心的解释: 利用 JSON 实现数据的交互处理.而且 Spring 里面提供有一个非常强大的 RestTemplate 操作模版,利用此模版可以非常轻松的实