在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
一起使用
由于您在一个容器中并使用
master local
,这将限制您使用本地文件系统,您可以从file://
URI访问该文件系统files
从运行命令的位置获取文件所在位置的相对路径,并添加到驱动程序/执行器类路径,我认为将这两条信息放在一起,您可以指定
连同
但是,如果要在集群环境中运行此操作,则
-Dlog4j.configuration
设置将不正确相关问题 更多 >
编程相关推荐