Spark Streaming 会一直运行, 所以如果不对日志加以调整, 就会产生很多日志占据磁盘空间.
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的详细日志。
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 # 基于大小的滚动策略
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"
...