大数据之 Spark DAG

Spark Directed Acyclic Graph (DAG) 是 Apache Spark 中的核心概念,它用于描述作业(job)的计算逻辑。在 Spark 中,用户通过对 RDD(Resilient Distributed Datasets)的操作构建一系列转换和动作,这些操作会形成一个有向无环图结构。

DAG 的构成:

  1. 节点(Vertices):DAG 中的每个节点代表了对数据的一次转换或动作。在 Spark 中,转换如 map(), filter(), join() 等函数应用于 RDD 时创建新的节点;而动作如 reduce(), collect(), count() 等触发执行并返回结果给驱动程序的动作也作为节点。

  2. 边(Edges):DAG 中的边表示节点间的依赖关系。如果一个节点的输出是另一个节点的输入,则它们之间存在一条边。例如,在连续调用两次转换操作 rdd.map(...).filter(...) 时,map 节点到 filter 节点就有一条依赖边。

DAG 的作用:

  • 优化执行计划:Spark 的 DAGScheduler 根据 DAG 来进行任务调度和优化,合并多个连续的转换操作为更少的阶段(stage),每个阶段内部的任务可以并行执行。
  • 容错性:由于 DAG 描述了完整的计算过程和依赖关系,当某个任务失败时,Spark 可以根据 DAG 重新计算丢失的数据,实现容错处理。
  • 高效执行:通过分析 DAG,Spark 能够识别出 Shuffle 操作等瓶颈阶段,并提前进行资源分配和优化。

执行流程

  1. 用户提交一个 Spark 应用程序,其中包含了一系列的 RDD 转换和动作操作。
  2. Spark 将这些操作组织成一个 DAG。
  3. DAGScheduler 将 DAG 分解成一序列的 stage,每个 stage 包含一组可以并行运行的任务。
  4. TaskScheduler 将任务分发到集群中的各个工作节点(executor)上执行。
  5. 当遇到 Shuffle 操作时,Spark 会在不同阶段之间执行实际的数据交换和分区。
  6. 执行完所有阶段后,最终的结果返回给驱动器(driver)程序。

你可能感兴趣的:(大数据,spark,hadoop)