spark-submit log4j 配置在 spark 上下文中没有影响

Posted

技术标签:

【中文标题】spark-submit log4j 配置在 spark 上下文中没有影响【英文标题】:spark-submit log4j configuration has no effect in spark context 【发布时间】:2021-05-13 14:14:14 【问题描述】:

spark-submit 中指定配置文件后,如this answer:

spark-submit \
    --master local \
    --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties"\
    --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j.properties"\
    --py-files ./dist/src-1.0-py3-none-any.whl\
    --files "/job/log4j.properties"\ # path in docker container
     main.py -input $1 -output $2 -mapper $3 $4 # app args

使用 dockerized 应用程序结构:

job/
|--  entrypoint.sh
|--  log4j.properties
|--  main.py

我收到以下错误:

log4j:ERROR Ignoring configuration file [file:/log4j.properties].log4j:ERROR 无法从 URL [file:/log4j.properties] 读取配置文件。

java.io.FileNotFoundException: /log4j.properties(没有这样的文件或目录)

如果我从 spark 上下文方法设置配置,它工作正常:PropertyConfigurator.configure:

logger = sc._jvm.org.apache.log4j.Logger
sc._jvm.org.apache.log4j.PropertyConfigurator.configure("/job/log4j.properties")
Logger = logger.getLogger("MyLogger")

也就是说,所有 sparkINFO 级别的日志都被静音了,我只看到警告和错误日志,这是我在配置文件中设置的。但是,如果我只是将记录器实例化为(理想行为):

log4jLogger = sc._jvm.org.apache.log4j
logger = log4jLogger.LogManager.getLogger("MyLogger")

它的行为与通过 PropertyConfigurator.configure 设置时不同,我已将其设置为静音所有 spark INFO 级别的日志记录。知道如何使用spark-submit 中设置的日志记录配置来控制应用程序的日志吗?

将 pyspark 与 spark 版本 3.0.1 和 python 3.8.0 一起使用。

【问题讨论】:

尝试从 extraJavaOptions 中删除 /job/。除非您传递 --files "/job/log4j.properties:/job/log4j.properties",否则该文件不会安装在作业文件夹中 感谢@OneCricketeer。不过似乎仍然以相同的方式表现 你尝试过吗file:///job/log4j.properties 另外,你能举一个你的log4j.properties的例子吗,你怎么知道It doesn't seem to pick up the configuration 配置文件应该可以正常工作。我已经使用PropertyConfigurator.configure 方法直接从应用程序中的 spark 上下文对其进行了测试,其中我将所有 spark 日志记录设置为 WARN 或 ERROR 级别,并将MyLogger 设置为 INFO 级别,这会使所有其他日志记录静音。我没有通过 spark-submit @pltc 获得相同的行为设置 【参考方案1】:

由于您在容器中并使用--master local,这会将您限制在本地文件系统中,您可以从file:// URI 访问。

--files 从您运行命令的位置获取文件所在位置的相对路径,并添加到驱动程序/执行程序类路径中,我认为

将这两条信息放在一起,您可以指定

-Dlog4j.configuration=file:///job/log4j.properties

随着

--files "/job/log4j.properties"

但是,如果您要在集群环境中运行它,那么 -Dlog4j.configuration 设置将不正确

【讨论】:

以上是关于spark-submit log4j 配置在 spark 上下文中没有影响的主要内容,如果未能解决你的问题,请参考以下文章

spark-submit 参数

Sparklyr - 在 spark-submit 中更改日志级别

Spark记录-spark-submit学习

spark配置-独立应用程序

Spark-submit参数优化配置

Spark-submit参数优化配置