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 上下文中没有影响的主要内容,如果未能解决你的问题,请参考以下文章