我有一个在EMR上运行的Spark Streaming作业,从Kafka读取消息并输出到S3。
我使用的是emr-5.17.0,即hadoop 2.8.4,spark 2.3.1
问题是随机播放的文件存储在以下位置:/ mnt / yarn / usercache / hadoop / appcache / application_1540126328960_0001 /
,直到我磁盘上的空间用完为止,永远都不会被删除
文件看起来像:shuffle_328_127_0.index,shuffle_328_134_0.data
我确实尝试过更新Yarn的政策,如下所示: yarn.nodemanager.localizer.cache.cleanup.interval-ms 300000 yarn.nodemanager.localizer.cache.target-size-mb 5000
但这并不能解决问题。
当前,我会自动重新启动作业,每隔几个小时启动一个新作业,当应用程序停止运行时,它将删除缓存
我该怎么做才能使yarn删除缓存文件?
谢谢
答案 0 :(得分:0)
我有一个cron作业(每小时)清理6个小时以上的文件/目录,以解决磁盘空间不足的问题,我在spark / yarn中没有找到可以自动执行此操作的参数,以下是详细信息
crontab条目。
0 * * * * /home/hadoop/clean_appcache.sh >/dev/null 2>&1
clean_appcache.sh
#!/bin/bash
BASE_LOC=/mnt/yarn/usercache/hadoop/appcache
sudo find $BASE_LOC/ -mmin +360 -exec rmdir {} \;
sudo find $BASE_LOC/ -mmin +360 -exec rm {} \;
答案 1 :(得分:0)
禁用动态分配。执行程序在执行所有清理之前被杀死。如果执行者没有被经常杀死/创建,泄漏就消失了。
为此,在您的spark-submit命令中:
--conf "spark.dynamicAllocation.enabled=false"