DAG,全称 Directed Acyclic Graph, 中文为:有向无环图。在 Spark 中, 使用 DAG 来描述我们的计算逻辑。
基础概念
介绍DAGScheduler中的一些概念,有助于理解后续流程。
作业(Job) 调用RDD的一个action,如count,即触发一个Job,spark中对应实现为ActiveJob,DAGScheduler中使用集合activeJobs和jobIdToActiveJob维护Job
调度阶段(Stage ) 代表一个Job的DAG,会在发生shuffle处被切分,切分后每一个部分即为一个Stage,Stage实现分为ShuffleMapStage和ResultStage,一个Job切分的结果是0个或多个ShuffleMapStage加一个ResultStage
任务(Task )最终被发送到Executor执行的任务,和stage的ShuffleMapStage和ResultStage对应,其实现分为ShuffleMapTask和ResultTask
DAG概述
DAG 是一组顶点和边的组合。顶点代表了 RDD, 边代表了对 RDD 的一系列操作。
DAG Scheduler 会根据 RDD 的 transformation 动作(算子),将 DAG 分为不同的 stage,每个 stage 中分为多个 task,这些 task 可以并行运行。

DAG解决问题
DAG 的出现主要是为了解决 Hadoop MapReduce 框架的局限性。
主要有两个:
1、每个 MapReduce 操作都是相互独立的,HADOOP不知道接下来会有哪些Map Reduce。
2、每一步

本文介绍了DAG(有向无环图)在Spark中的应用,阐述了其作为解决Hadoop MapReduce局限性的关键。DAG用于描述计算逻辑,优化计算计划,减少数据shuffle。DAGScheduler将operator graph划分为调度阶段(Stage),Task Scheduler根据Stage启动任务。RDD依赖关系分为窄依赖和宽依赖,影响Stage划分。
2221

被折叠的 条评论
为什么被折叠?



