Spark運(yùn)行在Standalone模式下產(chǎn)生的臨時(shí)目錄的問題
1.問題描述
收到運(yùn)維線上告警罗岖。
告警信息:文件系統(tǒng)剩余空間小于5% on volume /
目前狀態(tài): PROBLEM
告警等級(jí):High
2.異常分析
df -h
查看文件系統(tǒng)各分區(qū)使用情況
切換至root用戶
find / -type f -size +1000M -print0 | xargs -0 du -h
查看大文件所在位置
du -h -x --max-depth=1
該命令用于查看該目錄下一層深度的文件系統(tǒng)的大小情況,不推薦豪嚎,效率較低帽驯。
發(fā)現(xiàn)大量1G以上的文件均在/spark/tmp/* /spark/spark-events/*下
查看spark-defaults.conf
spark.local.dir file:///home/hdp/spark/tmp
spark.history.fs.logDirectory file:///home/hdp/spark/spark-events
3.解決
1 方案1(不建議使用)
可以通過crontab 定時(shí)執(zhí)行rm -rf /tmp/spark命令,缺點(diǎn):當(dāng)spark的任務(wù)執(zhí)行,這個(gè)時(shí)候會(huì)生成/tmp/spark 的臨時(shí)文件握恳,正好在這個(gè)時(shí)候
crontab 啟動(dòng)rm命令,從而導(dǎo)致文件找不到以至于spark任務(wù)執(zhí)行失敗
2 方案2(推薦在spark-env.sh 中配置參數(shù)捺僻,不在spark-defaults.conf 中配置)
spark環(huán)境配置spark.local.dir乡洼,其中 SPARK_LOCAL_DIRS : storage directories to use on this node for shuffle and RDD data
修改 conf 目錄下的spark-defaults.conf 或者 conf 目錄下的spark-env.conf,下面我們來一一驗(yàn)證哪個(gè)更好匕坯。
(1)修改spark執(zhí)行時(shí)臨時(shí)目錄的配置束昵,增加如下一行
spark.local.dir /diskb/sparktmp,/diskc/sparktmp,/diskd/sparktmp,/diske/sparktmp,/diskf/sparktmp,/diskg/sparktmp
說明:可配置多個(gè)目錄,以 "," 分隔葛峻。
(2)修改配置spark-env.sh下增加
export SPARK_LOCAL_DIRS=spark.local.dir /diskb/sparktmp,/diskc/sparktmp,/diskd/sparktmp,/diske/sparktmp,/diskf/sparktmp,/diskg/sparktmp
如果spark-env.sh與spark-defaults.conf都配置锹雏,則SPARK_LOCAL_DIRS覆蓋spark.local.dir 的配置
生產(chǎn)環(huán)境我們按照這樣的思路去處理
生產(chǎn)環(huán)境修改為:在spark-defaults.conf 下增加一行
spark.local.dir /home/hadoop/data/sparktmp