1. 程式人生 > >解決Spark Streaming任務日誌打爆磁碟問題

解決Spark Streaming任務日誌打爆磁碟問題

1.在standlone模式下,為了減少日誌在磁碟佔用的輸出的量,可以設定一下幾個引數。
spark.executor.logs.rolling.maxRetainedFilesspark.executor.logs.rolling.enableCompressionspark.executor.logs.rolling.maxSizespark.executor.logs.rolling.strategyspark.executor.logs.rolling.time.interval2.在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#Filelog4j.appender.RollingFile=org.apache.log4j.RollingFileAppenderlog4j.appender.RollingFile.File=${spark.yarn.app.container.log.dir}/spark.loglog4j.appender.RollingFile.MaxFileSize=10MBlog4j.appender.RollingFile.MaxBackupIndex=3log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.RollingFile.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n另外,如果你的程式中使用了log4j2作為輸出,還需要載入log4j2的配置,否則,用log4j2輸出的日誌將繼續輸出到stdout或stderr中,(具體看專案裡面的指定)。<?xml version="1.0" encoding="UTF-8"?><Configuration status="warn" name="MyApp" packages="org.apache.logging.log4j">      <Appenders>         <!--<Properties>            <Property name="baseDir">$${sys:spark.yarn.app.container.log.dir}</Property>         </Properties>-->        <RollingFile name="RollingFile" filePattern="$${sys:spark.yarn.app.container.log.dir}/app-%d{MM-dd-yyyy}-%i.log">          <PatternLayout>            <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>          </PatternLayout>          <Policies>            <TimeBasedTriggeringPolicy />            <SizeBasedTriggeringPolicy size="10MB"/>          </Policies>         <DirectWriteRolloverStrategy maxFiles="3"/>        </RollingFile>      </Appenders>      <Loggers>        <Root level="DEBUG">          <AppenderRef ref="RollingFile"/>        </Root>      </Loggers></Configuration>即使做了這些之後,可能stdout和stderr中還是有少量的輸出,是因為你的程式中可能有System.out、system.err的輸出。參考: