【问题标题】:Apache Spark custom log4j configuration for application应用程序的 Apache Spark 自定义 log4j 配置
【发布时间】:2018-04-05 02:18:34
【问题描述】:

我想在独立的 Spark 集群中为我的应用程序自定义 Log4J 配置。我的应用程序 JAR 中有一个 log4j.xml 文件。让 Spark 使用该配置而不是其自己的 Log4J 配置的正确方法是什么?

我尝试使用 --conf 选项设置以下内容,但没有成功。

spark.executor.extraJavaOptions -> -Dlog4j.configuration=log4j.xml
spark.driver.extraJavaOptions -> -Dlog4j.configuration=log4j.xml

我使用的是 Spark 1.4.1,我的 /conf 中没有 log4j.properties 文件。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    如果您使用 SBT 作为包管理器/构建器:

    $SPARK_HOME/conf 中有一个log4j.properties.template

    • 将其复制到您的 SBT 项目的 src/main/resource
    • 去掉.template后缀
    • 编辑它以满足您的需要
    • SBT run/package/* 将把它包含在 JAR 中,Spark 会引用它。

    对我有用,并且可能包括其他包管理器的类似步骤,例如行家。

    【讨论】:

    • 我正在使用 Gradle 构建项目。我将模板文件的副本放在我的 src/main/resources 中,并删除了 .template 后缀并进行了部署。但仍然没有运气。我检查了最终的 JAR,并在其中看到了 log4j.properties 文件。当我从应用程序的 Spark UI 检查日志时,我仍然在其中看到文本“使用 Spark 的默认 log4j 配置文件:org/apache/spark/log4j-defaults.properties”。
    • 请原谅我误解了您的问题,以上仅适用于独立的火花应用程序。如果要更改集群的日志记录行为,请将 log4j.properties.template 复制到同一目录,删除 .template 并编辑新文件。这应该为集群中的每个实例完成。还有sc.setLogLevel("LEVEL"),但我还不能理解它的行为。
    • 谢谢。我想看看是否有办法在不触及集群配置的情况下做到这一点。如果一切都失败了,我会沿着这条路走。
    【解决方案2】:

    尝试使用driver-java-options。例如:

    spark-submit --class my.class --master spark://myhost:7077 --driver-java-options "-Dlog4j.configuration=file:///opt/apps/conf/my.log4j.properties" my.jar
    

    【讨论】:

    • 这不起作用。我正在尝试在集群上执行此操作。我们在 YARN 上使用 spark。我尝试了以上所有这些添加到资源文件中,如上所示在提交命令中传递 --driver-java-options 但对我没有任何作用。它仍然选择默认的 Jar
    • 在集群模式下运行时,您必须使用以下命令将文件添加到类路径:--files file:///opt/apps/conf/my.log4j.properties
    • 这仅适用于驱动程序级别,在分布式模式下,您必须首先在 hadoop 上部署 log4j,因此每个执行程序模式的路径都是可见的,或者使用 --files 选项进行提交,所以文件是分布在所有节点上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多