请说明 Spark 的任务调度机制,并阐述集群资源状况如何影响调度决策。
考察说明
考查对 Spark 任务调度流程及资源感知调度的理解。
回答思路
- 【回答框架 1】Spark 任务调度分为两层:DAG 调度器(DAGScheduler)和任务调度器(TaskScheduler)。DAGScheduler 根据 RDD 的依赖关系将作业划分为多个 Stage,每个 Stage 包含一组可并行执行的 Task,并将 Task 集合提交给 TaskScheduler。
- 【回答框架 2】TaskScheduler 负责任务的具体分发,它根据资源情况将 Task 分配到 Executor 上。Spark 采用延迟调度(Delay Scheduling)机制,在本地性优先原则下,如果满足本地性要求的节点没有空闲资源,则等待一段时间,超时后降级尝试其他本地性级别,以在数据本地性和调度延迟之间取得平衡。
- 【回答框架 3】资源情况对调度的影响体现在多维度:Executor 数量决定并行执行的 Task 数;每个 Executor 的 CPU 核数和内存限制 Task 的并发度及运行开销;动态资源分配(Dynamic Allocation)会根据负载自动调整 Executor 数量,以适配当前资源。
- 【回答框架 4】调度器还会考虑公平性:FIFO 调度器按提交顺序执行作业,可能阻塞后续作业;公平调度器(Fair Scheduler)在不同作业间分配资源,每个作业获得约等份额的槽位,适合多租户场景。用户可根据对延迟和吞吐的需求选择调度模式。
- 【关键点 1】DAGScheduler 负责拆解 Stage,TaskScheduler 负责任务分发。
- 【关键点 2】延迟调度在数据本地性与等待时间之间权衡。
- 【关键点 3】Executor 资源(CPU、内存)决定任务并发度。
- 【关键点 4】动态资源分配根据负载调整 Executor 数。
- 【易错点 1】混淆 DAG 调度与任务调度职责。
- 【易错点 2】忽视数据本地性对调度效率的影响。