Spark - 从运行spark-submit的JAR加载log4j

时间:2017-11-28 16:55:50

标签: apache-spark log4j spark-submit

我为我的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内部的日志文件吗?

content inside of the JAR

正如我在课堂上所做的那样: - class com.path.to.class.InitialContactDriver

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

提前致谢! :)

1 个答案:

答案 0 :(得分:2)

您必须在命令中提供--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,但在本地模式和群集模式下工作正常。