任务如何在 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)中执行?的主要内容,如果未能解决你的问题,请参考以下文章