1.在standlone模式下,为了减少日志在磁盘占用的输出的量,可以设置一下几个参数。
spark.executor.logs.rolling.maxRetainedFiles
spark.executor.logs.rolling.enableCompression
spark.executor.logs.rolling.maxSize
spark.executor.logs.rolling.strategy
spark.executor.logs.rolling.time.interval
http://spark.apache.org/docs/latest/configuration.html
2.在yarn模式下运行的spark任务,想要减少日志输出的量需要修改spark的日志配置文件,spark默认使用 $SPARK_HOME/conf/log4j.properties的配置。
如果修改此处的配置会对所有的集群所有提交的任务生效,如果不想做这种全局的修改,也可以通过在启动脚本里面指定配置的方式。
spark-submit提供--file的选项,可以加载本地配置。
spark-submit \
--master yarn-cluster \
--files $basepath/libs/log4j2.xml,$basepath/libs/log4j.properties \
在log4j.properties里面,修改配置为将日志定向到文件里,去掉原本输出到Console的配置。为避免同一个executor的不同job同时写一直日志文件的现象,需要将日志文件的输出路径指定为
spark.yarn.app.container.log.dir。
这样,因为不同的任务使用的不同container,将会动态的创建日志到当前任务的container目录下,日志的输出和原来的stdout和stderr一样的效果。
log4j.rootLogger=${root.logger}
root.logger=INFO,RollingFile
#File
log4j.appender.RollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File=
${spark.yarn.app.container.log.dir}/spark.log
log4j.appender.RollingFile.MaxFileSize=10MB
log4j.appender.RollingFile.MaxBackupIndex=3
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
另外,如果你的程序中使用了log4j2作为输出,还需要加载log4j2的配置,否则,用log4j2输出的日志将继续输出到stdout或stderr中,(具体看项目里面的指定)。
即使做了这些之后,可能stdout和stderr中还是有少量的输出,是因为你的程序中可能有System.out、system.err的输出。
参考:
https://blog.csdn.net/dylanzhouz/article/details/53098508