Spark运行在Standalone模式下产生的临时目录的问题

Spark运行在Standalone模式下产生的临时目录的问题

1.问题描述

收到运维线上告警。
告警信息:文件系统剩余空间小于5% on volume /
目前状态: PROBLEM
告警等级:High

2.异常分析

df -h 查看文件系统各分区使用情况
切换至root用户
find / -type f -size +1000M -print0 | xargs -0 du -h 查看大文件所在位置
du -h -x --max-depth=1 该命令用于查看该目录下一层深度的文件系统的大小情况,不推荐,效率较低。
发现大量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 定时执行rm -rf /tmp/spark命令,缺点:当spark的任务执行,这个时候会生成/tmp/spark 的临时文件,正好在这个时候
crontab 启动rm命令,从而导致文件找不到以至于spark任务执行失败

2 方案2(推荐在spark-env.sh 中配置参数,不在spark-defaults.conf 中配置)
spark环境配置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,下面我们来一一验证哪个更好。
(1)修改spark执行时临时目录的配置,增加如下一行
spark.local.dir /diskb/sparktmp,/diskc/sparktmp,/diskd/sparktmp,/diske/sparktmp,/diskf/sparktmp,/diskg/sparktmp
说明:可配置多个目录,以 "," 分隔。

(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 的配置
生产环境我们按照这样的思路去处理
生产环境修改为:在spark-defaults.conf 下增加一行
spark.local.dir /home/hadoop/data/sparktmp

参考:https://blog.csdn.net/shenfuli/article/details/52473506

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容