hadoop - 使用自定义 log4j 覆盖 Yarn 中的容器日志

标签 hadoop mapreduce logstash hadoop-yarn

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

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

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

我正在使用 HDP(Hortonworks) 2.2 发行版。 基本上,我试图将套接字附加程序放入 container-log4j.properties 中,以便分析 Logstash 中的容器日志。

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

最佳答案

我为 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 没有发出任何警告。

享受

关于hadoop - 使用自定义 log4j 覆盖 Yarn 中的容器日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31027070/

相关文章:

hadoop - hadoop YARN内存和核心如何工作?

elasticsearch - 我可以在同一台服务器上运行Logstash的多个实例吗?

mysql - 最近 JDBC mySQL 连接器重命名导致 Logstash 崩溃

mongodb - 使用 Sqoop 从 MongoDB 中提取数据写入 HDFS?

java - Hadoop 在从 Spring 批处理管理员启 Action 业时获取连接被拒绝的异常

hadoop - 运行 MapReduce 作业时的事件链

hadoop - 简单 Yarn 应用程序的 NoClassDefFoundError

elasticsearch - Kibana管理中未显示索引模式

hadoop - 从 HDFS 导入数据到 Hive 表

hadoop - 在Hadoop中合并两个SortedMapWritable?