我正在运行一个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.logs
的stdout
部分包含我们的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个日志,但没有提到任何关于应用程序的日志。
1条答案
按热度按时间rks48beu1#
请尝试使用
--files
参数将具有Log4j属性的文件分发到集群,如果您使用的是Log4j 1,请在属性文件的路径前面加上file:
?