我无法在Amazon EMR上覆盖和使用自定义log4j.properties。我在EMR(Yarn)上运行Spark,并尝试使用Spark-Submit中的所有以下组合来尝试使用自定义log4j。
--driver-java-options "-Dlog4j.configuration=hdfs://host:port/user/hadoop/log4j.properties"
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=hdfs://host:port/user/hadoop/log4j.properties"
我还尝试使用file:////而不是hdfs从本地文件系统中进行选择。这似乎都不起作用。但是,当我在本地Yarn设置上运行时,我可以正常工作。
有什么想法吗?
答案 0 :(得分:2)
log4j对HDFS一无所知,因此它不能接受hdfs://路径作为其配置文件。有关配置log4j的更多信息,请参阅here。
要在EMR上配置log4j,您可以使用Configuration API将键值对添加到由驱动程序和执行程序加载的log4j.properties文件中。具体来说,您要将属性添加到spark-log4j配置分类。
答案 1 :(得分:2)
基本上,在与支持人员聊天并阅读文档后,我发现有两个选项可用于执行此操作:
1 - 通过启动EMR时传递的配置传递log4j.properties。乔纳森在答案中提到了这一点。
2 - 将“--files /path/to/log4j.properties”开关包含在spark-submit命令中。这会将log4j.properties文件分发到每个Spark Executor的工作目录,然后将-Dlog4jconfiguration更改为仅指向文件名:“spark.driver.extraJavaOptions = -Dlog4j.configuration = log4j.properties”
答案 2 :(得分:0)
这是最简单的解决方案,在我的情况下效果很好
注意:此集群中运行的所有 Spark 应用程序都会输出自定义 log4j.properties 文件中定义的日志。