使用EMR群集时,如何将驱动程序日志自动存档到S3?

时间:2019-01-10 15:04:00

标签: apache-spark amazon-emr

我正在通过spark-submit在由主节点和4个工作节点组成的EMR集群上运行应用程序(在client部署模式下)。集群配置为启用了日志聚合,并且我所有的执行程序日志都已正确存档到S3存储桶中。但是,我第一次启动应用程序时看不到驱动程序上生成的日志(它们显示在控制台上,但似乎没有记录到文件中)。尝试通过添加以下内容来更新文件

log4j.rootLogger = WARN,console,file
....
log4j.appender.file.DatePattern=.yyyy-MM-dd
log4j.appender.file.Threshold = TRACE
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = ${spark.yarn.app.container.log.dir}/spark.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n

根据建议here,但是当我使用spark-submit时,由于${spark.yarn.app.container.log.dir}/spark.log解析为/spark.log并且出现Permission Denied错误,因此记录失败。

我目前正在通过遵循this answer来解决此问题,因此以上代码用于驱动程序配置(但登录到具体的现有路径),而执行程序日志记录配置是默认配置(利用日志聚合和存档到S3)。我的问题是:

  1. ${spark.yarn.app.container.log.dir}为什么解析为空字符串?

  2. 是否有一种方法可以自动将驱动程序日志存档到S3(就像执行日志一样)?

0 个答案:

没有答案