spark stream配置log输出

2020-06-23 16:28:50 浏览数 (1)

参考解决spark streaming长时间运行日志不断增长问题

目的

本教程适用以下问题:

  • spark stream运行过久时,日志不断增长
  • 希望修改输出日志的格式
  • 配置executor端的输出

正文

在cluster模式下,spark-submit添加如下参数。两个--conf分别为driver和executor设置log4j的配置文件,--files将文件上传到集群

代码语言:javascript复制
--conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:driver-log4j.properties 
--conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:executor-log4j.properties 
--files ./driver-log4j.properties,./executor-log4j.properties

driver-log4j.properties

代码语言:javascript复制
log4j.rootLogger =info,stdout

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm} %5p %t %c{2}:%L - %m%n

此处driver端只进行标准输出, 并不保存到文件。如果保存到文件,路径中不要使用${spark.yarn.app.container.log.dir},因为driver初始化log4j时,该参数还未设置,直到executor启动时才设置。 executor-log4j.properties

代码语言:javascript复制
log4j.rootLogger =info,stdout,rolling

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm} %5p %t %c{2}:%L - %m%n

log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.conversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %t %c{2}:%L - %m%n
log4j.appender.rolling.maxFileSize=100MB
log4j.appender.rolling.maxBackupIndex=5
log4j.appender.rolling.file=${spark.yarn.app.container.log.dir}/stdout
log4j.appender.rolling.encoding=UTF-8

${spark.yarn.app.container.log.dir}这个参数[1]来自spark官网running-on-yarn教程,

If you need a reference to the proper location to put log files in the YARN so that YARN can properly display and aggregate them, use spark.yarn.app.container.log.dir in your log4j.properties. For example, log4j.appender.file_appender.File=${spark.yarn.app.container.log.dir}/spark.log. For streaming applications, configuring RollingFileAppender and setting file location to YARN’s log directory will avoid disk overflow caused by large log files, and logs can be accessed using YARN’s log utility.

值得留意的是,如果你不配置该参数,会报错java.io.FileNotFoundException。

executor既进行标准输出又要输出到文件。标准输出其实主要是方便client时调试;在cluster模式下,如果不需要在打印台查看日志,标准输出完全可以去掉。输出到文件有利于在webUI里查看。 log4j.appender.rolling.file的文件为stdout,方便对标准输出的日志和输出到文件的日志进行统一的日志滚动管理,避免标准输出的日志文件越来越大。(当文件过大后,会出现stdout、stdout.1、stdout.2等文件)


  1. 关于这个参数,还建议阅读https://anil.cloud/2017/07/11/an-approach-for-logging-in-spark-jobs/

0 人点赞