Apache Spark 中的 DAG Scheduler 与 Task Scheduler 各自承担什么职责?它们在 Spark 作业执行流程中分别起什么作用?
考察说明
考查对 Spark 核心调度器职责划分与协作机制的理解。
回答思路
- 【回答框架 1】DAG Scheduler 是高层调度器,负责将用户提交的 Job 根据 RDD 之间的依赖关系划分为多个 Stage,并以 Stage 为单位生成 TaskSet。它主要处理宽依赖的切割,决定任务的依赖顺序,并提交给底层执行。
- 【回答框架 2】Task Scheduler 是低层调度器,负责任务的具体分发与执行管理。它接收 DAG Scheduler 提交的 TaskSet,将每个任务分配到具体的工作节点(Executor)上,并处理任务重试、失败重试、推测执行等细粒度调度。
- 【回答框架 3】二者协作流程:Driver 启动后,用户代码触发 Action 时 DAG Scheduler 构建 DAG,按照宽依赖划分 Stage,并将每个 Stage 的 TaskSet 提交给 Task Scheduler;Task Scheduler 根据资源情况将任务部署到 Executor 并监控执行结果,任务完成后反馈给 DAG Scheduler。
- 【回答框架 4】DAG Scheduler 通过 Fault Tolerance 机制处理 Stage 级失败,若某 Stage 失败则重新提交该 Stage 及其依赖;Task Scheduler 处理任务级失败,如重试或重新调度。两者层级分明,确保作业容错与高效执行。
- 【回答框架 5】总体而言,DAG Scheduler 负责逻辑层面的阶段划分与任务生成,Task Scheduler 负责物理层面的资源分配与任务执行,共同实现 Spark 的分布式计算调度。
- 【关键点 1】DAG Scheduler 负责将作业按宽依赖划分为 Stage,并生成 TaskSet。
- 【关键点 2】Task Scheduler 负责任务分配到 Executor 并监控执行,处理失败与推测执行。
- 【关键点 3】DAG Scheduler 处理 Stage 级失败,Task Scheduler 处理任务级失败。
- 【易错点 1】混淆两者职责,错误认为 DAG Scheduler 直接调度任务到节点。
- 【易错点 2】忽略 Task Scheduler 的容错机制,实际它支持失败重试与资源感知调度。