1. 程式人生 > >解決spark streaming長時間執行日誌不斷增長問題

解決spark streaming長時間執行日誌不斷增長問題


元件:
基於CDH5.13、spark2.2.X

背景:
由於spark streaming是7*24小時不間斷執行的,日誌必然會越來越多到最後大的驚人,在此小二記錄一下解決日誌越來越大的過程,以便需要之人。

一、spark streaming log 日誌

首先官網的

spark.executor.logs.rolling.enabled
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
spark.executor.logs.rolling.strategy

在yarn-client,yarn-cluster中都是不起作用的。於是問了一個谷大爺之後,決定開始採用設定log4j.properties的方法

client模式下:

--driver-java-options "-Dlog4j.configuration=file:driver-log4j.properties" --conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:executor-log4j.properties --files ./driver-log4j.properties,./executor-log4j.
properties

需要注意的是client模式下是–driver-java-options,因為SparkContext的config起作用的時候,driver已經啟動的了

cluster模式

--conf spark.eventLog.enabled=false --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

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端只進行標準輸出

executor-log4j.properties

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

executor既要進行標準輸出又要輸出到檔案,標準輸出其實最主要的就是方便client時除錯,cluster模式標準輸出完全可以去掉,如果不需要在列印臺或者類似列印臺的地方檢視日誌。
需要注意的log4j.appender.rolling.file的檔案為stdout,方便對標準輸出的日誌和輸出到檔案的日誌進行統一管理,避免標準輸出的日誌檔案越來越大

當然了對log4j日誌的所有操作在此都是有效的

二、spark streaming event log

針對spark streaming的event log,CDH預設是開啟的,配置方式基於CM,而apache 版本的預設是關閉的,目前也不知道event log的確切用處,在此就將它關閉

--conf spark.eventLog.enabled=false

下面給出一個完整版的,以client為例

SPARK_KAFKA_VERSION=0.10 nohup spark2-submit --master yarn --deploy-mode client  --name spark-commom-orders --driver-class-path=kafka010/kafka-clients-0.10.2.1.jar --conf spark.eventLog.enabled=false --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  --jars $(echo sparklib0.10/*.jar | tr ' ' ',') --XXX  ./spark-common-1.0-SNAPSHOT.jar > /dev/null 2>&1 &

其中SPARK_KAFKA_VERSION=0.10是基於spark-streaming-kafka-0-10_2.11可依情況採用

關於重複提交jar包問題,請看一下文章