Spark Streaming 会一直运行, 所以如果不对日志加以调整, 就会产生很多日志占据磁盘空间.

Log4j的RollingFileAppender

Spark使用log4j作为日志记录工具。默认配置是将所有日志写入标准错误,这对批处理作业很好。但是对于流式作业,我们最好使用滚动文件appender,按大小剪切日志文件,只保留几个最近的文件。这是一个例子:

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=50MB
log4j.appender.rolling.maxBackupIndex=5
log4j.appender.rolling.file=/var/log/spark/${dm.logging.name}.log
log4j.appender.rolling.encoding=UTF-8

log4j.logger.org.apache.spark=WARN
log4j.logger.org.eclipse.jetty=WARN

log4j.logger.com.shzhangji.dm=${dm.logging.level}

这意味着log4j将日志文件滚动50MB并仅保留5个最近的文件。这些文件保存在/var/log/spark目录中,文件名从系统属性中选取dm.logging.name。我们还com.shzhangji.dm根据dm.logging.level属性设置了包的日志记录级别。另外要提到的是我们设置org.apache.spark为level WARN,以便忽略来自spark的详细日志。

关闭 spark eventLog

event log 会存放在 spark.eventLog.dir 指定目录下. 在 spark-defaults.conf 文件中

--conf spark.eventLog.enabled=false

基于配置参数

可以基于 spark 的配置参数来调整日志, 参考 官方文档 指定以下参数

--conf spark.executor.logs.rolling.maxRetainedFiles=5  # 保留5个滚动文件

--conf spark.executor.logs.rolling.enableCompression=true # 启用压缩

--conf spark.executor.logs.rolling.maxSize=104857600  # 指定当个滚动文件的最大大小为 100m

--conf spark.executor.logs.rolling.strategy=size  # 基于大小的滚动策略

手动设置 log4j 文件

standalone模式下

spark-submit
  --master spark://127.0.0.1:7077
  --driver-java-options "-Dlog4j.configuration=file:/path/to/log4j-driver.properties -Ddm.logging.level=DEBUG"
  --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/path/to/log4j-executor.properties -Ddm.logging.name=myapp -Ddm.logging.level=DEBUG"
  ...