【Spark】Spark日志過大導(dǎo)致磁盤溢出問題解決方案

一 問題背景

平臺近期出現(xiàn)多次spark任務(wù)日志文件將磁盤打滿,導(dǎo)致平臺異常報(bào)警和任務(wù)失敗的情況,這些任務(wù)包括Spark-Streaming任務(wù)和普通Spark任務(wù)。產(chǎn)生該問題的原因主要是:

Spark-Streaming任務(wù)運(yùn)行時(shí)間比較長,Executor和Driver進(jìn)程產(chǎn)生的Spark系統(tǒng)日志數(shù)量很大;業(yè)務(wù)用戶在應(yīng)用代碼中使用System.out.print等輸出了大量的調(diào)試信息(曾有任務(wù)運(yùn)行40分鐘打滿100G日志文件)。以上信息全部輸出在Yarn Container日志路徑下的stdoutstderr里面,而Yarn本身沒有對這些文件大小做限制,導(dǎo)致文件無限增長,最終將磁盤打滿。

二 解決方案

2.1 解決思路

針對該問題,Spark官網(wǎng)給出了解決方案:

  • spark-yarn-log.png

在此基礎(chǔ)上,結(jié)合實(shí)際情況,制定以下方案:

  • spark yarn contanier(包括executor和driver進(jìn)程)單獨(dú)使用一套日志機(jī)制,采用Rolling模式滾動刪除,保留最新的5G日志數(shù)據(jù):單個日志文件最大1G,最多保留5個,開啟滾動刪除。
  • 業(yè)務(wù)用戶在應(yīng)用代碼輸出的調(diào)試信息重定向至log4j日志中,限制單個文件大小并應(yīng)用滾動刪除機(jī)制。
2.2 實(shí)施方案
  • 自定義log4j.properties配置文件,限制文件大小,開啟滾動刪除。
  • 將該文件放置在$SPARK_HOME/conf/yarn-container-log4j-conf文件夾下面,與$SPARK_HOME/conf/log4j.properties區(qū)分。
  • spark-defaults.conf中通過spark.yarn.dist.files配置該文件,實(shí)現(xiàn)任務(wù)提交時(shí)上傳,并下發(fā)供Executor和Driver進(jìn)程使用。
  • 增加輸出信息重定向日志功能,使業(yè)務(wù)輸出的調(diào)試信息重定向至log4j配置的指定日志文件。
  • ApplicationMasterCoarseGrainedExecutorBackend主進(jìn)程中嵌入重定向函數(shù),實(shí)現(xiàn)Driver進(jìn)程和Executor進(jìn)程業(yè)務(wù)調(diào)試信息由管道輸出轉(zhuǎn)變成日志輸出。
  • 同時(shí),針對spark2.0以上版本,社區(qū)版本源碼中Logging類為內(nèi)部類,內(nèi)部版本將Logging類更改為公共類,供業(yè)務(wù)調(diào)用,可替代System.out輸出方式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。