Spark+Java(YARN集群模式)下/tmp临时目录未自动清理的解决咨询
搞定Spark YARN模式下/tmp临时文件自动清理的方案
嘿,刚好处理过类似的场景,先给你划个重点:你提到的spark.worker.cleanup.*那三个配置是Spark Standalone集群专属的,在YARN模式下根本不生效!别在这上面浪费时间啦,下面给你说YARN+MapR环境下的正确解法:
一、先搞懂核心逻辑
在YARN集群里,Spark作业的临时文件由两部分管控:Spark自身的上下文清理器,以及YARN的容器资源清理机制。我们要做的就是把这两部分的配置都调对,确保作业结束后/tmp里的临时数据被自动清掉。
二、具体配置方法(两种可选)
因为你是用spark-submit提交作业,有两种配置方式,选适合你的就行:
方式1:提交作业时临时指定配置
直接在spark-submit命令里加--conf参数,比如:
spark-submit \ --class com.your.project.YourSparkJob \ --master yarn \ --deploy-mode cluster \ --conf spark.cleaner.interval=300 \ --conf spark.cleaner.referenceTracking.cleanCheckpoints=true \ --conf spark.yarn.cleanup.enable=true \ --conf spark.yarn.cleanup.interval=600 \ your-spark-job.jar
方式2:修改Spark全局配置(所有作业生效)
如果你想让所有提交的Spark作业都自动清理临时文件,就修改集群的spark-defaults.conf文件,添加以下配置项:
# Spark上下文清理器配置,每5分钟清理一次 spark.cleaner.interval 300 # 开启checkpoint文件的自动清理(如果用了checkpoint一定要开) spark.cleaner.referenceTracking.cleanCheckpoints true # 开启YARN层面的作业后清理 spark.yarn.cleanup.enable true # YARN清理服务每10分钟运行一次 spark.yarn.cleanup.interval 600
三、关键参数详解
给你拆解下每个配置的作用,方便你根据自己的场景调整:
spark.cleaner.interval:Spark内置的清理器运行间隔,单位是秒。这个清理器会自动回收不再使用的RDD、广播变量,以及作业生成的临时文件。默认是1800秒(30分钟),可以根据作业频率调小,比如300秒(5分钟)。spark.cleaner.referenceTracking.cleanCheckpoints:如果你的作业用到了Spark的checkpoint功能,这个参数一定要设为true,它会让清理器同时清理已经没用的checkpoint文件。spark.yarn.cleanup.enable:开启YARN的作业后清理机制,作业完成后YARN会自动清理容器的工作目录和相关临时资源。spark.yarn.cleanup.interval:YARN清理服务的运行间隔,单位是秒,默认3600秒(1小时),调小的话可以更快清理遗留文件。
四、MapR环境的额外注意点
因为你用的是MapR发行版,还有两个小细节要留意:
- 确保/tmp目录的权限正确,Spark作业的运行用户要有读写和删除权限,不然清理器没法删文件。
- 如果你的Spark作业把临时数据存在MapR FS里,记得检查MapR自身的临时文件清理策略,避免和Spark的配置冲突。
这样配置之后,作业结束后/tmp里的临时数据就会被自动清理啦,不用再手动去删啦!
内容的提问来源于stack exchange,提问作者Anuj Mehra
相关产品推荐
相关产品推荐

