1. 程式人生 > >sparkstreaming日誌切分配置

sparkstreaming日誌切分配置

在Spark Standalone模式下,spark預設使用org/apache/spark/log4j-defaults.properties配置,所有的日誌都記錄在stderr裡面,由於Spark Streaming應用程式是一直執行的,時間長了以後stderr檔案會非常大,佔用空間的同時難以讓我們除錯和定位問題,所以我們需要切分日誌,spark原生提供了對Executor日誌的切分,Driver日誌需要我們單獨配置log4j。

  • Executor日誌切分,在spark應用環境變數中配置
  spark.executor.logs.rolling.strategy  time  //可以按日期(time)和日誌大小(size)來切分日誌
  spark.executor
.logs.rolling.time.interval daily //可以按天、小時、分鐘切分 spark.executor.logs.rolling.maxRetainedFiles 7 //保留多少個日誌檔案,舊的日誌自動刪除
  • 1
  • 2
  • 3

或者也可以自定義日誌生成方式,只要配置引數spark.executor.extraJavaOptions,指定log4j配置。 
Driver日誌切分 
sparksubmit的時候自定義log4j, –driver-java-options “-Dlog4j.configuration=file:/$PATH/log4j-driver.properties -Dapp.logging.name=NAME” ,用NAME去區分不同spark應用

 log4j.rootCategory=INFO,  FILE
 log4j.appender.FILE.Threshold=info 
 log4j.appender.FILE.file=/$PATH/${app.logging.name}-driver.log  
 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd 
 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
 log4j.appender.FILE.layout.ConversionPattern=[%p] %d %c %M - %m%n 
--------------------------------------------------------------------------------------------------------------------------------------

二。

由於spark on yarn的日誌會在stderr裡面一直追加,而且streaming又是長應用,那麼stderr會一直增長。解決辦法就是把stderr按天切割,這樣我們就可以刪除之前的日誌了。

1. 首先,把叢集中的hadoop的log4j檔案/etc/hadoop/conf/log4j.properties新增如下兩行:

log4j.additivity.com.kingsoft = false     com.kingsoft是專案的包名
log4j.additivity.org.apache.spark = false

然後把log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n的%c{2}改成%c{30}

最終的結果如下:

log4j.rootLogger=${root.logger}
root.logger=INFO,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{30}: %m%n


log4j.additivity.com.kingsoft = false
log4j.additivity.org.apache.spark = false

2. 編寫一個 log4j.properties 檔案,內容如下:

 # Set everything to be logged to the console
log4j.rootCategory=INFO, click_all
# Settings to quiet third party logs that are too verbose
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

log4j.appender.click_all = org.apache.log4j.DailyRollingFileAppender
log4j.appender.click_all.File = /sparklogs/click_all.log
log4j.appender.click_all.DatePattern = '.'yyyy-MM-dd_HH
log4j.appender.click_all.Append = true
log4j.appender.click_all.Threshold = INFO
log4j.appender.click_all.layout = org.apache.log4j.PatternLayout
log4j.appender.click_all.layout.ConversionPattern = %d{yy/MM/dd HH:mm:ss} %p %c{30}: %m%n

log4j.additivity.com._58city = false
log4j.logger.com._58city = INFO, click
log4j.appender.click = org.apache.log4j.DailyRollingFileAppender
log4j.appender.click.File = /sparklogs/click.log
log4j.appender.click.DatePattern = '.'yyyy-MM-dd_HH
log4j.appender.click.Append = true
log4j.appender.click.Threshold = INFO
log4j.appender.click.layout = org.apache.log4j.PatternLayout
log4j.appender.click.layout.ConversionPattern = %d{yy/MM/dd HH:mm:ss} %p %c{30}: %m%n
3.在提交命令spark-submit中新增如下引數 --files /sparkapps/display/log4j.properties  啟動後,即可看到日誌會被按天切割。以上是同事的幫助,才整理出來的,感謝昊哥。