【问题标题】:Spark -- Loading log4j from JAR running spark-submitSpark -- 从运行 spark-submit 的 JAR 加载 log4j
【发布时间】:2017-12-10 09:02:14
【问题描述】:

我已经为我的 spark 应用程序开发了一个自定义 log4j:

#######################
#    Roll by time     #
#######################
log4j.logger.myLogger=DEBUG, file 
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern = contactabilidad_%d{yyyy-MM-dd-hh}.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C:%L - %m%n
log4j.appender.file.encoding=UTF-8
log4j.appender.file.MaxFileSize=5MB

我将我的项目打包到一个 JAR 中,并在 spark-submit 中运行它。

我只想将日志写入一个文件,就像我这样做的那样,当文件 log4j.properties 进入我运行 spark-submit 的文件系统并在其中定义此路径时命令 java-options。

spark-submit --class com.path.to.class.InitialContactDriver 
--driver-java-options "-Dlog4j.configuration=file:log4j.properties" 
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" 
--master yarn    /home/cloudera/SNAPSHOT.jar

我的意思是: 我不能引用 JAR 中的日志文件吗?

正如我对班级所做的那样:--class com.path.to.class.InitialContactDriver

我打算在有限的环境中运行应用程序,我不想将文件上传到 FS,只需使用我在 JAR 中的内容即可。 那可能吗?如果不是,为什么不呢?

提前致谢! :)

【问题讨论】:

    标签: apache-spark log4j spark-submit


    【解决方案1】:

    您必须在命令中提供--driver-class-path 选项。尝试:

    spark-submit --class com.path.to.class.InitialContactDriver \
    --driver-java-options "-Dlog4j.configuration=file:log4j.properties" \
    --conf "spark.executor.extraJavaOptions=Dlog4j.configuration=file:log4j.properties" \
    --driver-class-path /home/cloudera/SNAPSHOT.jar \
    --master yarn    /home/cloudera/SNAPSHOT.jar
    

    我没有尝试过 YARN,但是在本地模式和集群模式下工作正常。

    【讨论】:

    • 嗨!感谢您的回答:) 我试过了,我得到了这个 error "log4j:ERROR Could not read configuration file from URL [file:log4j.properties].java.io.FileNotFoundException: log4j.properties (没有这样的文件或目录)”。
    • 是的,抱歉,请尝试在 --driver-java-options 和 --conf 中不使用 file:。所以:spark-submit --class com.path.to.class.InitialContactDriver \ --driver-java-options "-Dlog4j.configuration=log4j.properties" \ --conf "spark.executor.extraJavaOptions=Dlog4j.configuration= log4j.properties" \ --driver-class-path /home/cloudera/SNAPSHOT.jar \ --master yarn /home/cloudera/SNAPSHOT.jar
    • 这完全解决了我的问题。非常感谢! :)
    • 它是否适用于 YARN... 因为我在 YARN Cluster 模式下尝试了所有这些选项,但没有成功
    猜你喜欢
    • 2020-04-24
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多