使用自定义log4j覆盖Yarn中的Container日志

时间:2015-06-24 12:49:59

标签: hadoop mapreduce logstash yarn

我试图使用自定义log4j.properties覆盖YARN容器日志格式,但我无法这样做。

我试图覆盖container-log4j.properties中的hadoop-yarn-server-nodemanager.jar,然后替换jar,但没有效果。

我还尝试将自己的container-log4j.properties文件放在位置/etc/hadoop/conf中,以使其在类路径中重写。

我正在使用HDP(Hortonworks)2.2发行版。 基本上我试图将socket appender放在container-log4j.properties中,以便分析Logstash中的容器日志。

我是否遗漏了某些内容或使用了错误的属性文件,还是有其他方式?

1 个答案:

答案 0 :(得分:0)

我为Hadoop 2.6做了这个。所以这可能不适用于您的情况。 我意识到这个问题近一年来一直未得到答复。但回答那些将谷歌问题的人(正如我所做的那样)仍然是有用的

Hadoop使用log4j。根据log4j文档,我发现系统属性log4j.debug非常有用(更多:http://logging.apache.org/log4j/1.2/faq.html#noconfig

此属性启用log4j初始化详细输出,这使我能够更好地了解我的映射器的log4j获取其配置的位置。

此外,我使用pi计算器作业作为一项小工作来尝试覆盖日志记录。

我发起了

yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi -Dmapreduce.map.java.opts='-Dlog4j.debug' 3 10000

我已经

log4j: Trying to find [container-log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@deb6432.
log4j: Using URL [jar:file:/usr/lib/hadoop-yarn/hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar!/container-log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL jar:file:/usr/lib/hadoop-yarn/hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar!/container-log4j.properties
log4j: Hierarchy threshold set to [ALL].
log4j: Parsing for [root] with value=[WARN,CLA, EventCounter].
log4j: Level token is [WARN].
log4j: Category root set to WARN
log4j: Parsing appender named "CLA".
log4j: Parsing layout options for "CLA".
log4j: Setting property [conversionPattern] to [%d{ISO8601} %p [%t] %c: %m%n].
log4j: End of parsing for "CLA".
log4j: Setting property [containerLogDir] to [/hdfs/uuid/77fc1684-1751-4bf0-b474-5de75130dc23/yarn/logs/application_1467803702064_1954/container_e12_1467803702064_1954_01_000002].
log4j: Setting property [totalLogFileSize] to [0].
log4j: setFile called: /hdfs/uuid/77fc1684-1751-4bf0-b474-5de75130dc23/yarn/logs/application_1467803702064_1954/container_e12_1467803702064_1954_01_000002/syslog, true
log4j: setFile ended
log4j: Parsed "CLA" options.
log4j: Parsing appender named "EventCounter".
log4j: Parsed "EventCounter" options.
log4j: Finished configuring.

所以可以看到log4j从hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar获取配置

我解压缩了这个文件

jar xf hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar container-log4j.properties

修改它并放入我的目录。其余的只是想弄清楚在类路径中放入hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar之前的某个地方。

不幸的是,作业jar本身是类路径中的最后一个。因此,通过将修改后的container-log4j.properties作为jar的资源来覆盖配置是不可能的。

但幸运的是,带有用户缓存的文件夹是类路径中的第一个文件夹。所以 我添加了

log4j.logger.org.apache.hadoop.conf=ERROR

到配置中去掉有关使用弃用属性的所有这些警告 然后使用

重新启动工作
arn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi -files ./container-log4j.properties -Dmapreduce.map.java.opts='-Dlog4j.debug' 3 10000
瞧,瞧! org.apache.hadoop.conf没有警告。

享受