【发布时间】: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 获得相同的行为设置
标签: python apache-spark pyspark spark-submit