如何在hadoop2(amazonemr)中指定定制的log4j appender?hadoop2忽略包含自定义appender的log4j.properties文件,用内部log4j.properties文件覆盖它。有一面旗帜 -Dhadoop.root.logger 它指定了日志记录阈值,但对自定义附加器没有帮助。
-Dhadoop.root.logger
uurity8g1#
在部署中查找hadoop-config.sh。这是在执行hadoop命令之前要获取的脚本。我在hadoop-config.sh中看到以下代码,看看修改它是否有帮助。
HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.root.logger=${HADOOP_ROOT_LOGGER:-INFO,console}"
6ie5vjzr2#
我知道这个问题已经得到了回答,但是有一个更好的方法可以做到这一点,而且这些信息在任何地方都不容易获得。实际上,hadoop中至少使用了两个log4j.properties(至少对于yarn是这样)。我使用的是cloudera,但其他发行版也会使用类似的方法。
地点: /etc/hadoop/conf/log4j.properties (在客户机上)有一个log4j.properties被普通java进程使用。它会影响java进程中发生的所有事情的日志记录,但不会影响yarn/map reduce内部的日志记录。因此,所有驱动程序代码,任何将map reduce作业放在一起的代码(例如,级联初始化消息)都将根据您在此处指定的规则进行日志记录。这几乎从来不是您关心的日志属性文件。正如您所期望的,这个文件是在调用hadoop命令之后解析的,因此在更新配置时不需要重新启动任何服务。如果这个文件存在,它将优先于jar中的文件(因为它通常位于类路径的前面)。如果这个文件不存在,将使用jar中的那个文件。
/etc/hadoop/conf/log4j.properties
地点: etc/hadoop/conf/container-log4j.properties (在数据节点计算机上)这个文件决定了所有map和reduce任务的输出属性,并且几乎总是您在谈论hadoop日志记录时想要更改的内容。在更新版本的hadoop/yarn中,有人感染了一种危险的日志热毒株,现在默认的日志配置确保单个作业可以生成几百兆的不可读垃圾,使日志非常难以读取。我建议在container-log4j.properties文件的底部放置这样的内容,以消除大多数关于处理了多少字节的非常有用的消息:
etc/hadoop/conf/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属性文件一样,如果您创建 /etc/hadoop/conf/container-log4j.properties 它会用在你所有的Yarn上。这很好!注意:无论您做什么,jar中container-log4j-properties的副本都不会用于这些属性,因为yarn nodemanager jar在类路径中的位置更高。同样,不管互联网告诉你什么 -Dlog4j.configuration=PATH_TO_FILE 不会更改容器日志记录属性,因为在初始化容器时,该选项不会传递给yarn。
/etc/hadoop/conf/container-log4j.properties
-Dlog4j.configuration=PATH_TO_FILE
e5nszbig3#
1.为了更改name节点上的log4j.properties,可以更改/home/hadoop/log4j.properties。2.为了更改容器日志的log4j.properties,您需要在yarn containers jar处更改它,因为它们硬编码直接从项目资源加载文件。2.1ssh到从属服务器(在emr上,您也可以简单地将其添加为引导操作,因此不需要ssh到每个节点)。ssh到hadoop从属2.2覆盖jar资源的container-log4j.properties:jar uf/home/hadoop/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.2.0.jar容器-log4j.properties
3条答案
按热度按时间uurity8g1#
在部署中查找hadoop-config.sh。这是在执行hadoop命令之前要获取的脚本。我在hadoop-config.sh中看到以下代码,看看修改它是否有帮助。
6ie5vjzr2#
我知道这个问题已经得到了回答,但是有一个更好的方法可以做到这一点,而且这些信息在任何地方都不容易获得。实际上,hadoop中至少使用了两个log4j.properties(至少对于yarn是这样)。我使用的是cloudera,但其他发行版也会使用类似的方法。
本地属性文件
地点:
/etc/hadoop/conf/log4j.properties
(在客户机上)有一个log4j.properties被普通java进程使用。它会影响java进程中发生的所有事情的日志记录,但不会影响yarn/map reduce内部的日志记录。因此,所有驱动程序代码,任何将map reduce作业放在一起的代码(例如,级联初始化消息)都将根据您在此处指定的规则进行日志记录。这几乎从来不是您关心的日志属性文件。
正如您所期望的,这个文件是在调用hadoop命令之后解析的,因此在更新配置时不需要重新启动任何服务。
如果这个文件存在,它将优先于jar中的文件(因为它通常位于类路径的前面)。如果这个文件不存在,将使用jar中的那个文件。
容器属性文件
地点:
etc/hadoop/conf/container-log4j.properties
(在数据节点计算机上)这个文件决定了所有map和reduce任务的输出属性,并且几乎总是您在谈论hadoop日志记录时想要更改的内容。
在更新版本的hadoop/yarn中,有人感染了一种危险的日志热毒株,现在默认的日志配置确保单个作业可以生成几百兆的不可读垃圾,使日志非常难以读取。我建议在container-log4j.properties文件的底部放置这样的内容,以消除大多数关于处理了多少字节的非常有用的消息:
默认情况下,该文件通常不存在,在这种情况下,将使用hadoop-yar-server-nodemanager-stuff.jar(如uriah kremer所述)中找到的该文件的副本。但是,与其他log4j属性文件一样,如果您创建
/etc/hadoop/conf/container-log4j.properties
它会用在你所有的Yarn上。这很好!注意:无论您做什么,jar中container-log4j-properties的副本都不会用于这些属性,因为yarn nodemanager jar在类路径中的位置更高。同样,不管互联网告诉你什么
-Dlog4j.configuration=PATH_TO_FILE
不会更改容器日志记录属性,因为在初始化容器时,该选项不会传递给yarn。e5nszbig3#
1.为了更改name节点上的log4j.properties,可以更改/home/hadoop/log4j.properties。
2.为了更改容器日志的log4j.properties,您需要在yarn containers jar处更改它,因为它们硬编码直接从项目资源加载文件。
2.1ssh到从属服务器(在emr上,您也可以简单地将其添加为引导操作,因此不需要ssh到每个节点)。ssh到hadoop从属
2.2覆盖jar资源的container-log4j.properties:
jar uf/home/hadoop/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.2.0.jar容器-log4j.properties