如何在Hadoop 2中更改用户日志的日志级别?

时间:2014-12-30 18:15:09

标签: java hadoop logging log4j hadoop2

我一直在尝试更改用户日志上的日志级别,即CDH 5.2.1上/var/log/hadoop-yarn/userlogs/application_<id>/container_<id>下显示的文件。但是,无论我尝试什么,都只会显示INFO级日志。我想启用TRACE级别日志进行调试。

到目前为止我尝试过的事情:

  • /etc/hadoop/conf/log4j.properties
  • 中将所有记录器设置为TRACE级别
  • mapreduce.map.log.level。{/ li>中设置mapreduce.reduce.log.levelmapred-site.xml
  • 在提交之前在作业配置中设置mapreduce.map.log.levelmapreduce.reduce.log.level
  • 在我的作业jar文件中包含log4j.properties,将根Log4j记录器设置为TRACE。
  • 修改yarn-env.sh以指定YARN_ROOT_LOGGER=TRACE,console

这些都没有奏效 - 它们没有破坏任何东西,但它们对userlogs目录下的日志输出没有任何影响。修改yarn-env.sh 会导致ResourceManager和NodeManager日志进入跟踪级别。不幸的是,这些对我的目的没用。

我在/var/log/hadoop-yarn/userlogs/application_<id>/container_<id>/stderr中出现了可能相关的以下错误。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/lib/zookeeper/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/hadoop-yarn/nm-local-dir/usercache/tomcat/appcache/application_1419961570089_0001/filecache/10/job.jar/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
log4j:WARN No appenders could be found for logger (org.apache.hadoop.ipc.Server).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我不明白为什么log4j&#34;没有配置&#34;假设在作业jar文件的根目录下有一个log4j.properties文件指定了根记录器,则会发生消息:

log4j.rootLogger=TRACE, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] %m%n

我的代码不会故意使用SLF4J进行日志记录,它纯粹使用Log4j。

3 个答案:

答案 0 :(得分:5)

实际答案是将yarn.app.mapreduce.am.log.level设置为您需要的级别,但是,至关重要的是,它需要在提交时在Hadoop作业配置中设置。无法在全局集群中设置它。群集全局将始终默认为INFO,因为它是硬编码的。

单独使用container-log4j.properties将不起作用,因为YARN将覆盖命令行上的日志级别值。请参阅addLog4jSystemProperties的{​​{1}}方法,并使用org.apache.hadoop.mapreduce.v2.util.MRApps进行交叉引用。

org.apache.hadoop.mapreduce.MRJobConfig确实会受到尊重,但它无法覆盖此属性设置的级别。

答案 1 :(得分:1)

在CDH5.8上,我在作业提交时覆盖了应用程序日志级别。要修改映射器和缩减器的日志级别,我必须使用如下命令显式指定它们:

hadoop jar my-mapreduce-job.jar -libjars $ {LIBJARS} -Dyarn.app.mapreduce.am.log.level = DEBUG,console -Dmapreduce.map.log .level = DEBUG,console -Dmapreduce.reduce.log.level = DEBUG,console

将日志写入应用程序的syslog,可以使用Yarn ResourceManager Web UI浏览它们。

答案 2 :(得分:0)

您应该尝试编辑(或创建它是否存在):/ etc / hadoop / conf / container-log4j.properties。

您可以使用简单的ps aux查看它:命令行包含-Dlog4j.configuration=container-log4j.properties