背景
由於采用了sparkstreaming 任務一直再運行導致日志文件暴漲,達到了硬盤的預警,不得已必須指定策略定期刪除日志已保證服務器硬盤空間。
spark的日志分類
spark的日志都有那些:
1.event(history)
2.work
3.executor
解決方法
方案1
一開始為了快速實現日志清理,選擇了腳本自動清理,寫了shell腳本便於清理歷史文件,但是會有很多細節甚至有些文件不能刪除(由於進程占用),這里不做詳細介紹了。
方案2
spark配置來解決這幾個問題
conf文件下面的兩個文件中修改配置:
1.解決executor(work目錄) 日志太大的問題,修改spark-defaut.conf
# 日志循環復寫的策略(一般就是size和time)這里受限於空間選擇了大小
spark.executor.logs.rolling.strategy size
# 設定復寫的大小,這里設定了1G spark.executor.logs.rolling.maxSize 1073741824
# 設定組大保留文件 spark.executor.logs.rolling.maxRetainedFiles 100
# 設定更新周期這里選擇一小時檢查一次是否超過最大值 spark.executor.logs.rolling.time.interval hourly
2.解決歷史日志問題spark-env.sh 文件添加 歷史日志清洗參數配置
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=/export/opt/spark/spark2.4.0/logs -Dspark.history.fs.cleaner.enabled=true -Dspark.history.fs.cleaner.interval=1d -Dspark.history.fs.cleaner.maxAge=2d -Dspark.history.retainedApplications=100"
3.woker日志清理同上文件
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=1800 -Dspark.worker.cleanup.appDataTtl=86400"
方案3
log4j 替代默認的日志記錄,再shell的提交腳本中加入如下參數
--files "./log4j.properties" \ --driver-java-options "-Dlog4j.debug=true -Dlog4j.configuration=log4j.properties" \ --conf spark.driver.extraJavaOptions='-Dlog4j.configuration=file:/opt/spark/conf/log4j.properties' \
總結
再實際應用過程中依然有很多不能日志復寫或者不能文件導致日志太大的問題,需要具體問題具體解決。比如spark3.0 才支持history日志循環寫。另外yarn模式和standalone 也有很多不同,需要區別處理。