Spark应用程序不读取Jar中存在的log4j.properties

问题描述 投票:1回答:1

我正在使用MapR5.2 - Spark版本2.1.0而且我在Yarn CLuster模式下运行我的spark app jar。

我已经尝试了我找到的所有可用选项但是无法成功。

这是我们的生产环境。但我需要为我的特定火花工作,它应该跟随并拿起我的src / main / resources文件夹中存在的log4j-Driver.properties文件(我也通过打开jar确认我的属性文件存在)

1)我的日志文件的内容 - > log4j-Driver.properties

log4j.rootCategory=DEBUG, FILE
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n    
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=/users/myuser/logs/Myapp.log
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=100MB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Set the default spark-shell log level to WARN. When running the spark-shell, the
# log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=WARN

# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR

# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

2)我的Spark-Submit命令脚本

propertyFile=application.properties
spark-submit --class MyAppDriver \
--conf "spark.driver.extraJavaOptions -Dlog4j.configuration=file:/users/myuser/log4j-Driver.properties" \
--master yarn --deploy-mode cluster \
--files /users/myuser/log4j-Driver.properties,/opt/mapr/spark/spark-2.1.0/conf/hive-site.xml,/users/myuser/application.properties 
/users/myuser/myapp_2.11-1.0.jar $propertyFile

所有我需要的是截至目前我正在尝试将我的驱动程序日志写入我的属性文件中提到的目录(如上所述)如果我在此成功,那么我将尝试Executor日志。但首先我需要将此驱动程序日志写入我的本地(以及它的Cluster的Edge节点)

scala apache-spark yarn mapr spark-submit
1个回答
4
投票

/users/myuser/log4j-Driver.properties似乎是本地计算机上文件的路径,因此您可以将它用于--files参数。

问题是,驱动程序和/或执行程序上没有这样的文件,所以当你使用file:/users/myuser/log4j-Driver.properties作为-Dlog4j.configuration的参数时,Log4j将无法找到它。

由于您在YARN上运行,因此将列为--files参数的文件将提交给HDFS。每个应用程序提交都将在HDFS中拥有自己的基本目录,其中所有文件将由spark-submit放置。

为了引用这些文件,请使用相对路径。在你的情况下--conf "spark.driver.extraJavaOptions -Dlog4j.configuration=log4j-Driver.properties"应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.