Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop 2中的定制log4j appender_Java_Hadoop_Log4j_Amazon Emr - Fatal编程技术网

Java Hadoop 2中的定制log4j appender

Java Hadoop 2中的定制log4j appender,java,hadoop,log4j,amazon-emr,Java,Hadoop,Log4j,Amazon Emr,如何在Hadoop2(AmazonEMR)中指定定制的log4j appender Hadoop 2忽略包含自定义appender的log4j.properties文件,并用内部log4j.properties文件覆盖它。有一个标志-Dhadoop.root.logger,但它对自定义appender没有帮助。在部署中查找hadoop-config.sh。这是在执行hadoop命令之前要获取的脚本。我在hadoop-config.sh中看到了以下代码,看看修改它是否有帮助 HADOOP_OPTS

如何在Hadoop2(AmazonEMR)中指定定制的log4j appender


Hadoop 2忽略包含自定义appender的log4j.properties文件,并用内部log4j.properties文件覆盖它。有一个标志
-Dhadoop.root.logger
,但它对自定义appender没有帮助。

在部署中查找hadoop-config.sh。这是在执行hadoop命令之前要获取的脚本。我在hadoop-config.sh中看到了以下代码,看看修改它是否有帮助

HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.root.logger=${HADOOP_ROOT_LOGGER:-INFO,console}"

1.为了更改name节点上的log4j.properties,您可以更改/home/hadoop/log4j.properties

2.为了更改容器日志的log4j.properties,您需要在Thread containers jar中更改它,因为它们直接从项目资源中硬编码加载文件

2.1 ssh到从属服务器(在EMR上,您也可以简单地将其添加为引导操作,因此您不需要ssh到每个节点)。

2.2覆盖jar资源中的container-log4j.properties:


jar uf/home/hadoop/share/hadoop/warn/hadoop-warn-server-nodemanager-2.2.0.jarcontainer-log4j.properties我知道这个问题已经得到了回答,但有更好的方法可以做到这一点,而且这些信息在任何地方都不容易获得。实际上至少有两个log4j.properties可以在Hadoop中使用(至少对于纱线)。我正在使用Cloudera,但其他发行版也将使用类似的功能

本地属性文件 位置:
/etc/hadoop/conf/log4j.properties
(在客户端计算机上)

普通java进程使用log4j.properties。 它会影响java进程中发生的所有事情的日志记录,但不会影响Thread/Map Reduce内部。因此,所有驱动程序代码,任何将map reduce作业放在一起的代码(例如,级联初始化消息)都将根据此处指定的规则进行日志记录。这几乎不是您关心的日志属性文件

正如您所期望的,这个文件是在调用hadoop命令后解析的,因此在更新配置时不需要重新启动任何服务

如果这个文件存在,它将优先于jar中的文件(因为它通常位于类路径的前面)。如果此文件不存在,将使用jar中的文件

容器属性文件 位置:
etc/hadoop/conf/container-log4j.properties
(在数据节点机器上)

这个文件决定了所有map和reduce任务的输出属性,并且几乎总是您在谈论hadoop日志时想要更改的内容

在更新版本的Hadoop/Thread中,有人染上了一种危险的恶性日志热,现在默认的日志配置确保单个作业可以生成数百兆的无法读取的垃圾,使您的日志非常难以读取。我建议在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
,它将用于您的所有纱线。这很好

注意:无论您做什么,jar中的container-log4j-properties副本都不会用于这些属性,因为warn nodemanager jar在类路径中较高。类似地,不管internet告诉您什么,
-Dlog4j.configuration=PATH_TO_FILE
都不会改变您的容器日志记录属性,因为当容器初始化时,该选项不会传递给Thread