如何在Hadoop 2(amazon emr)中指定自定义log4j appender?
Hadoop 2忽略我的log4j.properties文件,该文件包含自定义appender,用内部log4j.properties文件覆盖它.有一个标志-Dhadoop.root.logger
是指定日志记录的阈值,但它并不能帮助定制的appender.
我知道这个问题已经得到了解答,但有一种更好的方法可以做到这一点,并且这些信息在任何地方都不容易获得.实际上至少有两个log4j.properties在Hadoop中使用(至少对于YARN).我正在使用Cloudera,但它将与其他发行版类似.
位置:( /etc/hadoop/conf/log4j.properties
在客户端机器上)
有一个正常的java进程使用的log4j.properties.它会影响在java进程中发生但不在YARN/Map Reduce内部的所有内容的日志记录.因此,所有驱动程序代码,插入映射减少作业的任何内容(例如,级联初始化消息)将根据您在此处指定的规则进行记录.这几乎不是您关心的日志属性文件.
正如您所期望的那样,在调用hadoop命令后会解析此文件,因此在更新配置时无需重新启动任何服务.
如果此文件存在,它将优先于jar中的文件(因为它通常在类路径中较早).如果此文件不存在,将使用jar中的文件.
位置:( etc/hadoop/conf/container-log4j.properties
在数据节点机器上)
此文件决定所有map和reduce任务的输出属性,并且几乎总是在你谈论hadoop日志时你想要改变的.
在较新版本的Hadoop/YARN中,有人发现了一种危险的恶劣日志热,现在默认的日志记录配置可确保单个作业可以生成数百个不可读的垃圾,使您的日志难以阅读.我建议在container-log4j.properties文件的底部放置这样的东西,以摆脱大部分有关处理了多少字节的非常有用的消息:
log4j.logger.org.apache.hadoop.mapreduce=WARN log4j.logger.org.apache.hadoop.mapred=WARN log4j.logger.org.apache.hadoop.yarn=WARN log4j.logger.org.apache.hadoop.hive=WARN log4j.security.logger=WARN
默认情况下,此文件通常不存在,在这种情况下,将使用在hadoop-yar-server-nodemanager-stuff.jar中找到的此文件的副本(如uriah kremer所述).但是,与其他log4j-properties文件一样,如果你创建/etc/hadoop/conf/container-log4j.properties
它,它将用于你所有的YARN东西.哪个好!
注意:无论您做什么,jar中的container-log4j-properties副本都不会用于这些属性,因为YARN nodemanager jar在类路径中更高.同样,尽管互联网告诉您-Dlog4j.configuration=PATH_TO_FILE
不会改变容器记录属性,因为在初始化容器时,该选项不会传递给纱线.