任务如何在 spark 引擎(称为 DAG)中执行?

Posted

技术标签:

【中文标题】任务如何在 spark 引擎(称为 DAG)中执行?【英文标题】:how do tasks get executed in spark engine ( referred to DAG )? 【发布时间】:2019-07-10 12:24:50 【问题描述】:

如果有人回答我并向我解释这件事,我将不胜感激。

据我了解,DAG 是如何完成工作的物理计划,但我不明白它是如何真正并行执行任务的。 我详细阐述了我的问题,希望能得到答案。

an example of a DAG

1) 任务如何划分阶段? (低级口语)

2) 提供大量的执行者,一个阶段的任务是否同时工作?

如果是这样,这是否意味着并行运行的任务数等于**独立阶段中的任务数**?

3) 最后,这些阶段何时并行工作?如何从 DAG 中知道并行执行阶段的数量?

【问题讨论】:

【参考方案1】:

1.

一般的经验法则是每个阶段都是随机操作, shuffle 操作是最终需要减少到一台机器上的操作(即 reduce、join、count) 这意味着并非所有任务都可以同时运行(尽管启动任务可以),并且它们需要跨执行程序移动数据。这意味着此操作对于常规转换操作(即地图过滤器)来说非常昂贵。

这就是为什么根据 shuffle 操作创建阶段的原因。

就速度而言,Spark 中 mapreduce 的最大优势之一是,一旦您设置了一个执行器,它通常会在工作期间保持活动状态,因此执行 2 个小地图操作通常会被连接到后面的单个地图场景。 shuffle 操作也不能做到这一点。

总而言之,每个阶段都包含可以并行运行的任务。

2.

能够同时运行的任务数是(执行器数 * 每个执行器上的核心数)

3.

不同阶段不会仅并行运行任务

【讨论】:

那么同阶段的任务是同时进行的吗? ,那么同一阶段的分区之间的界线是指什么?同一阶段的任务是独立的吗? 应该是的。

以上是关于任务如何在 spark 引擎(称为 DAG)中执行?的主要内容,如果未能解决你的问题,请参考以下文章

Spark任务提交与执行之RDD的创建转换及DAG构建

工作流引擎Oozie:workflow

将 DAG 转换为任务的巨大延迟

大数据之Spark:Spark 底层执行原理

DAG 如何让 Apache Spark 容错?

Spark——Spark执行流程