Spark 执行器空闲超时

问题描述 投票:0回答:1

我有一个 EMR 集群,正在其中运行带有 Spark 动态分配的 pyspark 作业。

spark.dynamicAllocation.enabled=true

以下是集群配置

1 Node
128GB Ram
10 cores

Core Nodes
Autoscaled till 10 nodes
Each with
128 GB Ram
10 Cores

当我提交作业时,在作业开始时,有近 100 个执行器被创建,然后其中近 95 个执行器在 3 分钟的空闲超时后被 master 杀死。

我的问题是,如果大多数执行器都没有被使用并且只需要 5 个,为什么 Spark 创建了额外的 95 个执行器?

根据我的理解,在动态模式下,spark应该只创建所需数量的执行器。

下面是来自历史服务器的屏幕截图,显示执行者是如何被杀死的。

请注意,我没有面临任何 OOM 问题。执行者因空闲超时而被杀死。

apache-spark pyspark bigdata amazon-emr
1个回答
0
投票

这与此处的问题和答案相关:为什么要删除 Spark 执行器(日志中带有“ExecutorAllocationManager:请求删除 executorIds”)?

在您工作的整个生命周期中,不同阶段具有不同级别的计算强度。我猜测您所看到的行为之所以会发生,是因为您的工作以大量数据开始,但最终输出却较小。在我们的团队中,我们有很多这样的工作 - 从数十 TB 的数据开始,但输出是几 MB,其中大多数减少是通过 groupBy() 和汇总统计函数的各种应用程序实现的。因此,作业的最后阶段的 shuffle 输入为数百 MB,但初始阶段的输入为数十 TB。因此,既然您有

spark.dynamicAllocation.enabled=true
,Spark 就会创建大量执行器来处理作业初始阶段的负载,然后在作业后期阶段使用更少的执行器时释放它们。

© www.soinside.com 2019 - 2024. All rights reserved.