【问题标题】:Spark streaming job doesn't delete shuffle filesSpark 流式传输作业不会删除 shuffle 文件
【发布时间】:2020-06-30 16:30:48
【问题描述】:

我有一个在 EMR 上运行的 spark 流作业,从 Kafka 读取消息并输出到 S3。

我使用的是 emr-5.17.0,即 hadoop 2.8.4,spark 2.3.1

问题是shuffle文件堆积在:/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 删除缓存文件?

谢谢

【问题讨论】:

  • 您能否仅通过配置解决此问题?我有类似的问题,但我不想运行 crons 或类似的东西。

标签: apache-spark apache-kafka spark-streaming


【解决方案1】:

我有一个 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 {} \;

【讨论】:

    【解决方案2】:

    禁用动态分配。执行者在进行所有清理之前被杀死。如果执行者没有不断被杀死/创建,那么泄漏就消失了。

    为此,请在您的 spark-submit 命令中:

      --conf "spark.dynamicAllocation.enabled=false"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 2020-11-03
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2021-10-29
      • 2018-05-27
      相关资源
      最近更新 更多