首页 > 解决方案 > 在 hadoop jar 调用中将参数传递给 log4j.properties

问题描述

我有一个log4j.properties文件,其中包含以下行:

log4j.appender.fileOut.File=${log.dir}/${stage}_${date}.log

如果我只使用 java(而不是 Hadoop MapReduce),则以下工作:

java -cp <jar_dependencies> -Dstage=matching -Ddate=2018-11-26 -Dlog.dir=/tmp/project_folder/log/ -Dlog4j.configuration=file:path/to/conf/log4j.properties main_class

即正确传递和替换了log4j 参数。但是,当尝试运行 mapReduce 作业时,会进行hadoop jar命令行调用:

hadoop jar <input_jar_here.jar> -Dstage=matching -Ddate=2018-11-26 -Dlog.dir=/tmp/project_folder/log/ -Dlog4j.configuration=file:path/to/conf/log4j.properties -libjars <jar_dependencies>

它不起作用,即不传递/替换参数。

注意:如果我对 log4j.properties 中的参数值进行硬编码,则之前的hadoop jar调用有效。

考虑到调用,如何传递参数以便在log4j.properties文件中相应地填充/设置它们hadoop jar

如果我能更清楚,请告诉我。

标签: javahadooploggingmapreducelog4j

解决方案


来自hadoop 文档

-D property=value 使用给定属性的值。

看起来 -D 后面应该有空格而不是 java 语法

-D属性=值


推荐阅读