Spark Fair调度仅单个Stage活跃,其余Pending问题求助
Spark FAIR调度仅单Stage活跃的原因分析
从你的配置和现象来看,导致仅单个Stage活跃、其余处于Pending状态的核心原因如下:
test池调度模式冲突:你为test池配置了FIFO调度模式,而非FAIR。FIFO模式下,池内任务会按顺序执行,若该池中的任务占用了大量集群资源,其他池的任务会因无法获取资源而处于Pending状态。即使任务分布在不同池,只要某个FIFO模式的池占满资源,其他池的任务就无法启动。集群资源总量不足:检查集群总可用Executor Core和内存。如果当前活跃Stage已经占用了几乎所有资源(比如总Core数刚好等于
production池minShare+test池minShare,或被其中一个池的任务完全占用),剩余Stage因无法获取足够资源会持续Pending。单个Stage资源需求过高:若某个待启动的Stage所需Core数超过集群剩余可用资源,或超过对应池能分配到的资源额度,也会导致该Stage无法启动。比如某Stage需要3个Core,但集群剩余仅1个,就会一直处于Pending。
默认池配置不明确:你提到默认池设为FAIR,但配置文件未显式定义
default池参数。虽然Spark默认调度模式为FAIR,但默认池的minShare或weight若不合理(比如minShare过高),会抢占其他池的资源,导致其他任务无法获得资源启动。
验证与调整建议
- 将
test池的schedulingMode修改为FAIR,观察多Stage是否能同时活跃。 - 通过Spark UI的Executors页面,确认总可用资源及当前活跃任务的资源占用情况。
- 合理调整各池的
weight和minShare:确保所有池的minShare之和不超过集群总Core数,通过weight调整资源分配比例。 - 显式配置
default池的参数,避免默认配置引发的资源分配问题。
内容的提问来源于stack exchange,提问作者Angle Tom
相关产品推荐
相关产品推荐

