我一直在尝试更改用户日志上的日志级别,即CDH 5.2.1上/var/log/hadoop-yarn/userlogs/application_<id>/container_<id>
下显示的文件。但是,无论我尝试什么,都只会显示INFO
级日志。我想启用TRACE
级别日志进行调试。
到目前为止我尝试过的事情:
/etc/hadoop/conf/log4j.properties
。mapreduce.map.log.level
。{/ li>中设置mapreduce.reduce.log.level
和mapred-site.xml
mapreduce.map.log.level
和mapreduce.reduce.log.level
。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。
答案 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
。