数据岗位面试题更新 2026-08-05

请描述在 Apache Spark 中,DAG(有向无环图)的生成过程,以及它在整个任务调度流程中扮演的角色是什么?

数据系统设计技术原理Apache Spark

考察说明

考察对 Spark 核心调度机制中 DAG 生成逻辑及其在任务调度中的功能的理解。

回答思路

  1. 【回答框架 1】DAG 是 Spark 根据用户编写的转换算子(如 map、filter、join 等)的执行顺序构建的有向无环图,节点表示 RDD 或 shuffle 阶段,边表示数据依赖关系。
  2. 【回答框架 2】生成过程从对 RDD 的转换操作开始,Spark 通过记录每个 RDD 的血统(lineage)来构建依赖图,连接 RDD 间的宽窄依赖。
  3. 【回答框架 3】DAG 在任务调度中的作用是确定任务划分:根据宽依赖划分 stage,stage 内划分为多个 task 并提交到集群执行,实现阶段化执行和失败恢复。
  4. 【回答框架 4】具体流程:用户代码构建 RDD 转换链,当遇到行动操作(action)时触发调度器,DAGScheduler 将 DAG 转换为 stage 和 task 集合,随后提交给 TaskScheduler。
  5. 【回答框架 5】DAG 支持容错,通过血统根据依赖关系重新计算丢失分区,实现可靠的重新执行。
  6. 【关键点 1】DAG 由 RDD 的转换操作构建,节点是 RDD,边表示依赖关系。
  7. 【关键点 2】宽依赖(如 shuffle)是划分 stage 的边界,窄依赖(如 map)则合并为一个 stage 内的 task。
  8. 【关键点 3】DAGScheduler 负责将 DAG 拆分为 stage 并生成任务集,TaskScheduler 负责具体任务执行。
  9. 【关键点 4】行动操作触发 DAG 生成和调度,生成过程由 DAGScheduler 完成。
  10. 【易错点 1】混淆 DAG 生成与提交时机,DAG 并非每次行动操作都重新生成,而是复用已有 RDD 定义,行动时构建执行计划。
  11. 【易错点 2】忽略宽窄依赖差异,误将窄依赖也划入新 stage。
  12. 【易错点 3】认为 DAG 直接包含物理执行细节,实际 DAG 是逻辑依赖图,物理执行由任务集完成。