AWS EMR集群Spark任务长期处于accepted状态的配置排查问询
Spark任务长期处于Accepted状态排查配置项
1. YARN调度资源限制类
yarn.scheduler.maximum-allocation-vcores:你当前配置为64,先确认Spark任务申请的总vcore数、单个Executor的vcore数是否超过该阈值,超出后调度器会拒绝分配资源,导致任务停留在Accepted状态。此外重点排查你未列出的yarn.scheduler.capacity.maximum-am-resource-percent参数,该参数控制队列中可用于运行ApplicationMaster的资源占比,占比打满后新任务的AM无法启动,是任务卡Accepted最常见的原因。- 补充核对对应队列的
yarn.scheduler.capacity.root.<你的队列名>.maximum-capacity参数,同时查看队列剩余可用资源,若近期集群任务量上涨导致队列资源被占满,新任务会自然排队等待。
2. NodeManager健康状态类
yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage:你当前配置为90%,如果集群中NodeManager节点的磁盘使用率达到90%,该节点会被标记为不健康,YARN不会向不健康节点分配任务,可调度节点减少会直接拉长Accepted等待时长。yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb:你当前配置为0,该配置本身不会导致问题,但如果节点所有数据盘剩余空间为0,依然会被判定为不健康,需排查集群节点的磁盘使用率。
3. ResourceManager调度性能类
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms:你当前配置为250ms,远低于默认的1000ms,如果集群节点数较多,过于频繁的心跳请求会大幅提升ResourceManager的负载,导致调度效率下降,任务调度延迟上涨。- 补充排查调度器类型配置
yarn.resourcemanager.scheduler.class,如果使用公平调度器且配置了复杂的权重、抢占规则,也可能导致调度延迟上升。
4. Spark任务资源配置类
- 检查Spark提交参数:
spark.executor.instances、spark.executor.cores、spark.executor.memory、spark.driver.memory,确认任务申请的总资源是否超出集群/队列的剩余可用资源,若申请资源超过集群可提供上限,任务会一直排队等待已有任务释放资源。
内容的提问来源于stack exchange,提问作者Hitesh Ahuja
相关产品推荐
相关产品推荐

