使用自定义log4j覆盖yarn中的容器日志

vngu2lb8  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(615)

我正在尝试使用自定义log4j.properties覆盖容器日志格式,但我不能这样做。
我已经试过了 container-log4j.propertieshadoop-yarn-server-nodemanager.jar 然后更换jar,但没有效果。
我也试着把自己的 container-log4j.properties 文件所在位置 /etc/hadoop/conf 使其在类路径中重写。
我使用的是hdp(hortonworks)2.2发行版。基本上我试着把插座附加器 container-log4j.properties 以便对登录的容器进行分析 Logstash .
我是否遗漏了什么或使用了错误的属性文件,或者有其他方法吗?

2mbi3lxu

2mbi3lxu1#

我是为Hadoop2.6做的。所以这可能不适用于你的情况。我意识到这个问题已经有将近一年没有答案了。但是,回答那些会用谷歌搜索这个问题的人仍然是有用的(就像我做的那样)
hadoop使用log4j。根据log4j文档,有一个系统属性log4j.debug,我发现它非常有用(更多:http://logging.apache.org/log4j/1.2/faq.html#noconfig)
此属性启用log4j初始化详细输出,这使我能够更好地了解Map程序的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没有警告。
享受

相关问题