You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EMR任务节点Shuffle日志占满磁盘:任务异常终止原因排查

EMR 6.9 Spark 3任务磁盘占用攀升及异常终止问题分析

问题现象

  • 在EMR 6.9集群运行持续Spark 3任务,节点磁盘使用率随时间逐步上升
  • 任务节点捕获到YARN容器监控警告日志:
2023-04-12 22:02:45,532 WARN org.apache.hadoop.yarn.util.ProcfsBasedProcessTree (Container Monitor): Error reading the stream java.io.IOException: No such process
         at java.io.FileInputStream.readBytes(Native Method)
         at java.io.FileInputStream.read(FileInputStream.java:255)
         at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
         at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
         at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
         at java.io.InputStreamReader.read(InputStreamReader.java:184)
         at java.io.BufferedReader.fill(BufferedReader.java:161)
         at java.io.BufferedReader.readLine(BufferedReader.java:324)
         at java.io.BufferedReader.readLine(BufferedReader.java:389)
         at org.apache.hadoop.yarn.util.ProcfsBasedProcessTree.constructProcessInfo(ProcfsBasedProcessTree.java:531)
         at org.apache.hadoop.yarn.util.ProcfsBasedProcessTree.updateProcessTree(ProcfsBasedProcessTree.java:211)
         at org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl$MonitoringThread.run(ContainersMonitorImpl.java:537)
  • 任务终止后遗留Shuffle日志,重启任务可降低磁盘使用率

异常终止及磁盘占用原因分析

1. YARN监控日志错误的直接原因

日志中的No such process错误,是YARN的ProcfsBasedProcessTree组件尝试读取进程信息时,目标Executor进程已意外退出,但监控线程仍在追踪该进程的资源使用情况,从而抛出异常。

2. 导致Executor意外退出及Shuffle日志遗留的核心原因

  • Executor内存溢出(OOM):处理大数据集时,Executor堆内存或堆外内存不足,触发JVM OOM Killer强制终止进程。进程突然退出后,Spark的Shuffle文件清理逻辑未正常执行,导致数据残留。
  • YARN资源阈值触发的进程终止:集群资源紧张时,YARN NodeManager会因容器内存/CPU超出预设阈值,直接杀死Executor进程。这种强制终止同样会打断Shuffle清理流程。
  • Shuffle清理配置不合理:若未启用spark.shuffle.service.enabled,或spark.shuffle.cleaner.interval等清理参数设置过长,Shuffle文件无法及时被回收,即使任务正常终止也可能残留。
  • EMR 6.9版本兼容性bug:该版本集成的Spark 3与Hadoop YARN可能存在进程监控或Shuffle管理的已知bug,导致进程终止后清理逻辑失效。

3. 磁盘使用率攀升的根本原因

任务异常终止后遗留的Shuffle日志持续占用磁盘,加上持续运行的任务不断产生新的Shuffle数据,旧数据无法被回收,最终导致磁盘使用率逐步上升。重启任务会触发Spark初始化清理逻辑,清除之前遗留的Shuffle文件,因此磁盘使用率下降。

排查与优化建议

  • 查看Executor日志(路径通常为/var/log/hadoop/yarn/userlogs),确认是否存在OOM或其他进程终止的明确报错。
  • 调整Spark资源配置:增大spark.executor.memory,合理设置spark.executor.memoryOverhead比例,避免内存溢出。
  • 启用YARN Shuffle Service:设置spark.shuffle.service.enabled=true,由YARN统一管理Shuffle文件生命周期,即使Executor意外退出也能正常清理。
  • 优化Shuffle清理参数:缩短spark.shuffle.cleaner.interval,启用spark.cleaner.referenceTracking.cleanCheckpoints,确保过期Shuffle文件及时回收。
  • 查阅EMR 6.9版本发布说明,确认是否存在相关已知bug,必要时升级至更高版本的EMR集群。

内容的提问来源于stack exchange,提问作者blue01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:57:35