AWS EMR上的自定义log4j.properties

时间:2017-02-25 06:09:53

标签: apache-spark log4j emr

我无法在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设置上运行时,我可以正常工作。

有什么想法吗?

3 个答案:

答案 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)

这是最简单的解决方案,在我的情况下效果很好

  1. 通过终端ssh到EMR集群
  2. 转到 conf 目录 (cd /usr/lib/spark/conf)
  3. 用您的自定义值替换 log4j.properties 文件。
  4. 确保您正在编辑具有 root 用户访问权限的文件(键入 sudo -i 以 root 用户身份登录)

注意:此集群中运行的所有 Spark 应用程序都会输出自定义 log4j.properties 文件中定义的日志。