如何根据驱动程序覆盖Spark的log4j.properties?

时间:2015-03-03 19:36:27

标签: apache-spark logging

我试图覆盖Spark的默认log4j.properties,但没有运气。我尝试将以下内容添加到spark-submit:

--conf "spark.executor.extraJavaOptions=Dlog4j.configuration=/tmp/log4j.properties"  
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=/tmp/log4j.properties"

但这似乎不起作用。我还尝试在--files中使用spark-submit选项,但似乎也没有用。有没有人有日志记录设置,所以你有每个驱动程序log4j.properties文件,而不使用默认值?

我正在使用Mesos和Marathon来运行Spark驱动程序。我不确定--files选项,我找不到任何关于它如何使用以及它的确切用途的例子。

我还想提一下,我手动将log4j.properties文件上传到我的测试更改的所有节点。

Spark现在的版本是1.1.0。

6 个答案:

答案 0 :(得分:14)

对于驱动程序/ shell,您可以在运行--driver-java-optionsspark-shell脚本时使用spark-submit进行设置。

在Spark中,您无法设置--conf spark.driver.extraJavaOptions,因为在启动JVM之后设置了。使用spark提交脚本--driver-java-options时,将这些选项替换为运行驱动程序的JVM(例如java -Dblah MyClass)的启动。

请注意,-Dlog4j.configuration属性应该是有效的网址,因此如果文件系统中的某个位置使用file:网址。如果资源变量无法转换为URL,例如由于MalformedURLException,则log4j将从类路径中搜索资源。

例如,要使用自定义log4j.properties文件;

./spark-shell --driver-java-options "-Dlog4j.configuration=file:///etc/spark/my-conf/log4j.warnonly.properties"

答案 1 :(得分:3)

关闭了几个细节。

conf标志应如下所示:
--conf spark.executor.extraJavaOptions="-Dlog4j.configuration=log4j.properties" --conf spark.driver.extraJavaOptions="-Dlog4j.configuration=/tmp/log4j.properties" --files /tmp/log4j.properties

您还需要使用--files参数将log4j.properties文件上传到群集,执行者可以在群集中找到它。此外,由于上面的配置假定您使用的是client模式,因此在cluster中,两个配置都会使用相同的相对路径:-Dlog4j.configuration=log4j.properties

P.S。如果您的日志记录覆盖也需要其他依赖项,您可能还需要提供它们:--conf spark.driver.extraClassPath=custom-log4j-appender.jar请参阅:custom-log4j-appender-in-spark-executor

祝你好运

答案 2 :(得分:2)

我无法制作

  

- conf“spark.executor.extraJavaOptions = -Dlog4j.configuration = / tmp / log4j.properties”

  

- conf“spark.executor.extraJavaOptions = -Dlog4j.configuration = file:///tmp/log4j.properties”

上班。

唯一适合我的是--driver-java-options。

答案 3 :(得分:2)

有多种方法可以实现它,但这取决于您/应用程序需要为您的用例选择最佳的方法 -

  • 通过向Spark Driver和Executor提供额外的java选项,而log4j.properties存在于同一路径的集群的每个节点(如果您在本地运行作业,则为本地计算机),请使用以下命令
      

    spark-submit --master local [2] - conf   ' spark.driver.extraJavaOptions = Dlog4j.configuration =文件:/tmp/log4j.properties'    - conf' spark.executor.extraJavaOptions = -Dlog4j.configuration = file:/tmp/log4j.properties'   --class com.test.spark.application.TestSparkJob target / application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

如果您的jar中的root4类路径中存在log4j.properties,那么您可以在命令中跳过 file:,如下所示 - conf' spark.driver.extraJavaOptions = -Dlog4j.configuration = log4j.properties' --conf' spark.executor.extraJavaOptions = -Dlog4j.configuration = log4j.properties'

  • 通过将您的log4j.properties文件发送到yarn并为Spark Driver和Executor提供额外的java选项,这样就不需要每个节点上的log4j.properties,纱线将在这种情况下管理,使用下面的命令< / p>

      

    spark-submit --master local [2] - files /tmp/log4j.properties   的 - CONF   &#39; spark.driver.extraJavaOptions = Dlog4j.configuration = log4j.properties&#39;    - conf&#39; spark.executor.extraJavaOptions = -Dlog4j.configuration = log4j.properties&#39;   --class com.test.spark.application.TestSparkJob target / application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

  • 通过更改spark conf或spark默认log4j.properties文件

      

    更改或更新log4j.properties at   /etc/spark/conf.dist/log4j.properties

我已经尝试了所有这些并为我工作,我建议也要经过标题&#34; 调试你的应用程序&#34;在火花岗位下面这真的很有帮助 - https://spark.apache.org/docs/latest/running-on-yarn.html

答案 4 :(得分:1)

我不相信spark.driver.extraJavaOptions参数存在。对于spark.executor.extraJavaOptions,您似乎有拼写错误。试试这个:

--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=/tmp/log4j.properties"

答案 5 :(得分:0)

TL; DR

  

我正在使用Mesos和Marathon运行Spark驱动程序。我不确定--files选项,也找不到有关如何使用它以及其确切功能的任何示例。

     

我还要提及的是,我将log4j.properties文件手动上载到了我所有要进行测试的更改的节点上。

由于您的log4j.properties已经在节点上,所以唯一的问题是您忘记了file:前缀。目前,您的URI无效。

它们应该是:

--conf "spark.executor.extraJavaOptions=Dlog4j.configuration=file:/tmp/log4j.properties"  
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/tmp/log4j.properties"

log4j.properties添加--files

log4j.properties期间将spark-submit发送到您的节点非常容易。 您需要指定:

--files /absolute/path/to/your/log4j.properties 

,它们将在spark-node的根目录中可用,因此您可以通过以下方式访问它们:

--conf "spark.executor.extraJavaOptions=Dlog4j.configuration=file:log4j.properties"  
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties"

需要更多吗?

如果您想了解使用Spark-Submit时配置日志记录的其他方式,请访问我的其他详细答案:https://stackoverflow.com/a/55596389/1549135