在 Spark 的作业之间移动执行器的开销?

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

我正在阅读一篇关于 Spark 中作业调度的论文,我对他们对 Spark 的概述感到困惑:

Spark作业由一个DAG组成,其节点是作业的执行阶段。每个阶段代表系统在该阶段输入数据的许多分片上并行运行的操作。输入是一个或多个父阶段的输出,每个分片由单个任务处理。所有父阶段完成后,阶段的任务即可运行。可以并行运行多少个任务取决于作业拥有的执行器数量。通常,一个阶段的任务数量多于执行者数量,因此任务会分几次运行。执行器由 Spark master 根据用户请求进行分配,并且默认情况下会坚持执行作业直到作业完成。然而,Spark 还支持根据挂起任务的等待时间动态分配执行器 [9],尽管在作业之间移动执行器会产生一些开销(例如,拆除和启动 JVM)。

Spark

作业调度文档提到了应用程序之间执行器的静态与动态分配,所以听起来他们正在混合作业和应用程序。同时,他们正确地认识到作业是阶段的 DAG,并且他们后来提到他们将研究限制在单个应用程序内的作业调度。为什么“在工作之间移动执行者”会产生开销? JVM 真的需要为此重新启动吗? Tuning Spark 没有提及任何有关此开销的内容。

我希望得到一些澄清!

apache-spark
1个回答
0
投票
我查看了他们的一些源代码以获取上下文线索,并相信他们隐含地假设每个应用程序有一个作业。一般来说,这是不正确的,因为作业可以从单个应用程序中的多个线程启动,所以我希望他们能明确地说明这一假设。

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