混淆的日志记录,缺少应用程序日志消息- AWS EMR,spark-submit,yarn集群模式,log4j

xxhby3vn  于 2023-06-22  发布在  Spark
关注(0)|答案(1)|浏览(124)

我正在运行一个spark-submit(版本3.2.1-amzn-0)作业,它执行我们在Amazon EMR 6.7上编写的Scala代码(RandomForest)。

spark-submit ... --class ...RandomForest \
 --conf spark.driver.extraJavaOptions="-Dlog4j.configuration=loggingSparkSubmitlog4j1.properties" \
 --conf spark.executor.extraJavaOptions="-Dlog4j.configuration=loggingSparkSubmitlog4j1.properties" \
 --deploy-mode cluster --master yarn ...

我们尝试使用log4j v1打印各种信息位来调试一些问题。我们没有看到log4j日志消息,但是看到了一些我们穿插的println语句。下面是相关代码:

object RandomForest extends Serializable {
    val logger: Logger = LogManager.getLogger("gov.afms.dbp.spark.analytics.RandomForest")
// ...
    def main(args: Array[String]): Unit = {
        println("println before 1st log statement")
        logger.info("RandomForest start...")
        println("println before 2nd log statement")
        logger.fatal("RandomForest start (not really fatal)...")
        println("println says... RandomForest after log statements")

loggingSparkSubmitlog4j1.properties的相关部分如下所示:

log4j.rootCategory=INFO,rolling,console
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.rootLogger=INFO, rolling 

log4j.appender.rolling=org.apache.log4j.RollingFileAppender 
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout 
log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n 
log4j.appender.rolling.maxFileSize=100MB 
log4j.appender.rolling.maxBackupIndex=10 
log4j.appender.rolling.file=${spark.yarn.app.container.log.dir}/biobank_1_2.log 
log4j.appender.rolling.encoding=UTF-8

我从yarn中收集各种日志,使用:

yarn logs -applicationId application_168... > all.logs

all.logsstdout部分包含我们的printlns,但不包含任何log4j消息。

========================================================================================================
LogType:stdout
LogLastModifiedTime:Thu May 25 17:12:28 +0000 2023
LogLength:7256
LogContents:
println before 1st log statement
println before 2nd log statement
%d [%thread] %-5level %logger - %msg%nprintln says... RandomForest after log statements

看起来我们的loggingSparkSubmitlog4j1.properties文件正在被读取,因为我在all.logs中看到提到biobank_1_2.log的行,这只能来自loggingSparkSubmitlog4j1.properties

End of LogType:biobank_1_2.log

虽然我没有看到任何指示biobank_1_2.log开始的行,也没有看到“fatal”log语句的输出。为什么我在all.logs中看不到“致命”日志消息的输出?我觉得奇怪的一件事是EMR的Configure cluster logging and debugging提到了收集的4个日志,但没有提到任何关于应用程序的日志。

rks48beu

rks48beu1#

请尝试使用--files参数将具有Log4j属性的文件分发到集群,如果您使用的是Log4j 1,请在属性文件的路径前面加上file:

spark-submit --deploy-mode client\
 --class app.App\
 --files loggingSparkSubmitlog4j1.properties\
 --conf 'spark.driver.defaultJavaOptions=-Dlog4j.configuration=file:loggingSparkSubmitlog4j1.properties'\
 --conf 'spark.yarn.app.container.log.dir=/tmp/spark_app/'\
 target/scala-2.12/test-app_2.12-1.0.jar 

Message from the println().
Message from the System.err.println().
logger.isInfoEnabled() = true
23/06/16 17:13:53 INFO RandomForest: Message from logger.info().

相关问题