我试图覆盖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。
答案 0 :(得分:14)
对于驱动程序/ shell,您可以在运行--driver-java-options
或spark-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-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)
我正在使用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