sparksubmit log4j配置在spark上下文中不起作用

2024-03-29 00:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

停靠的应用程序结构为:

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

我得到以下错误:

log4j:ERROR Ignoring configuration file [file:/log4j.properties].log4j:ERROR Could not read configuration file from URL [file:/log4j.properties].

java.io.FileNotFoundException: /log4j.properties (No such file or directory)

如果我从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设置它的行为不同,我已将其设置为使所有sparkINFO级日志静音。你知道如何使用spark-submit中设置的日志配置来控制应用程序的日志吗

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


Tags: pyorgconfigureapachejobpropertiesjvmlogger
1条回答
网友
1楼 · 发布于 2024-03-29 00:44:40

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

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

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

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

连同

 files "/job/log4j.properties"

但是,如果要在集群环境中运行此操作,则-Dlog4j.configuration设置将不正确

相关问题 更多 >