spark-submit log4j 配置在 spark 上下文中无效
spark-submit log4j configuration has no effect in spark context
在 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 -output -mapper # app args
dockerized 应用程序结构为:
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 context 方法设置配置,它工作正常:PropertyConfigurator.configure
:
logger = sc._jvm.org.apache.log4j.Logger
sc._jvm.org.apache.log4j.PropertyConfigurator.configure("/job/log4j.properties")
Logger = logger.getLogger("MyLogger")
也就是说,所有spark INFO
级别的日志记录都被静音了,我只看到警告和错误日志,这是我在配置文件中设置的。但是,如果我只是将记录器实例化为(理想的行为):
log4jLogger = sc._jvm.org.apache.log4j
logger = log4jLogger.LogManager.getLogger("MyLogger")
它的行为与通过 PropertyConfigurator.configure
设置时不同,我已将其设置为静音所有 spark INFO
级别的日志记录。关于如何使用 spark-submit
中设置的日志记录配置来控制应用程序日志的任何想法?
使用带有 spark 版本 3.0.1
和 python 3.8.0
.
的 pyspark
由于您在容器中并使用 --master local
,这将限制您使用本地文件系统,您可以从 file://
URI 访问它。
--files
从您 运行 命令的位置获取文件所在位置的相对路径,并添加到 driver/executor 类路径,我认为
将这两条信息放在一起,你可以指定
-Dlog4j.configuration=file:///job/log4j.properties
与
一起
--files "/job/log4j.properties"
但是,如果您要 运行 在集群环境中这样做,那么 -Dlog4j.configuration
设置将不正确
在 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 -output -mapper # app args
dockerized 应用程序结构为:
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 context 方法设置配置,它工作正常:PropertyConfigurator.configure
:
logger = sc._jvm.org.apache.log4j.Logger
sc._jvm.org.apache.log4j.PropertyConfigurator.configure("/job/log4j.properties")
Logger = logger.getLogger("MyLogger")
也就是说,所有spark INFO
级别的日志记录都被静音了,我只看到警告和错误日志,这是我在配置文件中设置的。但是,如果我只是将记录器实例化为(理想的行为):
log4jLogger = sc._jvm.org.apache.log4j
logger = log4jLogger.LogManager.getLogger("MyLogger")
它的行为与通过 PropertyConfigurator.configure
设置时不同,我已将其设置为静音所有 spark INFO
级别的日志记录。关于如何使用 spark-submit
中设置的日志记录配置来控制应用程序日志的任何想法?
使用带有 spark 版本 3.0.1
和 python 3.8.0
.
由于您在容器中并使用 --master local
,这将限制您使用本地文件系统,您可以从 file://
URI 访问它。
--files
从您 运行 命令的位置获取文件所在位置的相对路径,并添加到 driver/executor 类路径,我认为
将这两条信息放在一起,你可以指定
-Dlog4j.configuration=file:///job/log4j.properties
与
一起--files "/job/log4j.properties"
但是,如果您要 运行 在集群环境中这样做,那么 -Dlog4j.configuration
设置将不正确