Spark作业Stage启动延迟求助:Stage 8前置完成后久未启动
排查Spark Stage延迟启动的方向
针对Stage 8在前置阶段完成后延迟37分钟启动的问题,可从以下几个维度排查:
集群资源占用与调度
- 检查集群资源队列(YARN/Standalone)是否被其他高优先级作业占满,导致Stage 8无法获取足够的Executor资源;查看集群UI的资源使用面板,确认CPU、内存的剩余量。
- 若开启了动态资源分配(
spark.dynamicAllocation.enabled=true),检查Driver日志中是否有Executor申请超时的记录,或者集群是否存在Executor回收后无法快速扩容的情况。 - 确认调度模式:若使用FAIR调度,检查作业所属队列的权重和资源配额,是否存在调度优先级被压低的情况。
Shuffle依赖完整性
- 检查前置阶段(Stage 0-7)的Shuffle输出文件是否完整,查看Shuffle服务日志(如
shuffle-service.log)是否有文件丢失、权限异常或读取失败的报错。 - 验证Shuffle数据的存储介质(HDFS/本地磁盘)是否正常,是否存在IO卡顿或磁盘空间不足的情况。
- 检查前置阶段(Stage 0-7)的Shuffle输出文件是否完整,查看Shuffle服务日志(如
Driver端状态排查
- 查看Driver的GC日志,确认是否发生长时间Full GC导致调度线程阻塞,可通过
-XX:+PrintGCDetails参数生成的日志分析GC停顿时间。 - 检查Driver是否在等待外部依赖(如数据库连接、第三方服务响应),查看Driver日志中是否有等待IO的阻塞记录。
- 查看Driver的GC日志,确认是否发生长时间Full GC导致调度线程阻塞,可通过
Stage配置与Task属性
- 检查Stage 8的Task数量是否远超集群处理能力,或者
spark.task.cpus设置过高,导致单个Task占用过多资源,延长资源申请时间。 - 确认
spark.locality.wait等本地性配置是否设置过长,导致Task一直在等待本地/机架级资源,迟迟无法启动。
- 检查Stage 8的Task数量是否远超集群处理能力,或者
内容的提问来源于stack exchange,提问作者mari
相关产品推荐
相关产品推荐

