繁体   English   中英

Spark UI 执行器

[英]Spark UI Executor

在 Spark UI 中,添加了 18 个执行器,删除了 6 个执行器。 当我检查 executor 选项卡时,我看到了许多死亡和排除的 executor。 目前,在 EMR 中使用动态分配。

我查阅了一些关于已故执行人的帖子,但这些帖子大多与工作失败有关。 就我而言,似乎工作本身并没有失败,但可以看到死亡和被排除的执行者。

这些“死亡”和“排除”的执行者是什么? 它如何影响当前 Spark 集群配置的性能? (如果它影响性能)那么提高性能的好方法是什么?

启用动态分配后,spark 正在尝试将执行者的数量调整为活动阶段中的任务数量。 让我们看一下这个例子:

  1. 工作开始,第一阶段是从大量来源中读取的,这需要一些时间。 假设这个源是分区的,Spark 生成了 100 个任务来获取数据。 如果您的执行器有 5 个核心,Spark 将生成 20 个执行器以确保最佳并行性(20 个执行器 x 5 个核心 = 100 个并行任务)

  2. 可以说,在下一步中,您正在进行重新分区或合并连接,将随机分区设置为 200 spark 将生成 200 个任务。 他很聪明地发现他目前只有 100 个可用内核,因此如果有新资源可用,他将尝试生成另外 20 个执行器(40 个执行器 x 5 个内核 = 200 个并行任务)

  3. 现在连接完成了,在下一阶段你只有 50 个分区,要并行计算,你不需要 40 个执行器,10 个就可以(10 个执行器 x 5 个核心 = 50 个并行任务)。 现在,如果进程花费了足够的时间,Spark 可以释放一些资源,您将看到已删除的执行程序。

  4. 现在我们有涉及重新分区的下一阶段。 分区数等于 200。使用 10 个执行器,您只能并行处理 50 个分区。 Spark 将尝试获得新的执行者......

您可以阅读这篇博文: https://aws.amazon.com/blogs/big-data/best-practices-for-successfully-managing-memory-for-apache-spark-applications-on-amazon-emr/

spark.dynamicAllocation.enabled 属性的问题在于它需要您设置子属性。 一些示例子属性是 spark.dynamicAllocation.initialExecutors、minExecutors 和 maxExecutors。 大多数情况下需要子属性才能在集群中为应用程序使用正确数量的执行程序,尤其是当您需要同时运行多个应用程序时。 设置子属性需要大量的试验和错误才能获得正确的数字。 如果它们不正确,则可能会保留容量但从未实际使用过。 这会导致资源浪费或其他应用程序出现 memory 错误。

在这里你会发现一些提示,根据我的经验,如果你要在同一个集群中并行运行几个作业,那么设置 maxExecutors 是值得的,因为大多数时候为了获得 100% 的效率而饿死其他作业是不值得的一份工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM