Spark技术内幕读书笔记:Spark核心——DAGScheduler任务切分调度与TaskScheduler任务执行调度计算过程详解

本文深入探讨Spark的调度系统,包括DAGScheduler如何根据DAG进行任务切分,TaskScheduler如何执行任务。重点介绍了FIFO和公平调度算法,解析了任务调度的整个流程,从job提交到stage划分,再到task的执行和资源分配。通过理解这些机制,有助于优化Spark应用的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

————Spark技术内幕读书笔记————

本书的三个核心:

 

 

Scheduler任务调度充分体现了与MapReduce完全不同的设计思想。

MapReduce把计算拆分为Map阶段与Reduce阶段,一个Job两阶段完成就完成了,采用的是分治思想,对于复杂的计算时可能需要多次串联多个MR生成多个Job来完成。

而Spark则不同,采用的是内存迭代式计算,也就是一个Job它可以分为n个阶段(Stage),Stage划分的依据是Shuffle,无论多复杂的计算大部分都可以在多个Job中完成所有的Stage,且Shuffle时除非内存不足时才会Spill写磁盘,否则子Stage的RDD会根据Shuffle的算法从父Stage的Partition中拿到属于自己Partition的数据,生成新的RDD,所有迭代计算都是在内存中完成,效率就比较高。

调度系统——上面基于内存的迭代式计算主要就依赖于DAGScheduler与TaskScheduler来分配计算资源!

Spark对于DAG与Task的实现以及不同执行阶段的划分和任务的提交执行,充分体现了其设计的优雅与高效!

 

spark集群中Driver、Cluster Manager、Worker、Executor之间在的关系图:

————第四章 Scheduler模块详解————

 

任务调度整体架构

将用户提交的计算任务按照DAG划分不同的阶段的计算任务提交到集群进行最终的计算

RDD Objects:从RDDS中构建DAG。实际代码中创建的RDD,是DAG的基本元素,Spark提供了丰富的Transformation和Action算子来对它进行操作。

DAGScheduler:对DAG进行任务切分,生成TaskSet。分析用户提交的应用、并根据计算任务的依赖关系建立 DAG,然后将DAG划分为不同的Stage阶段,其中每个Stage由可以并发进行执行的一组Task任务构成,所有Task的执行逻辑完全相同,只是处理的数据不一样。DAG无论在任何部署方式下都是相同的。在DAGScheduler将Task任务划分完成后,将Task组提交给TaskScheduler。

TaskScheduler:启动任务并调度任务(就近原则)。收到任务集后,TaskScheduler通过Cluster Manager在集群的某个Worker的Executor上启动任务。任务完成后将结果保存到指定地方或回传到Driver。

TaskScheduler为创建它的SparkContext调度任务,从DAGScheduler接收不同Stage的任务,并向集群提交这些任务,并为执行得特别慢的任务启动备份任务。

TaskScheduler的具体实现交给TaskSchedulerImpl实现。

TaskSchedulerImpl会在以下4种情况调用SchedulerBackend的reviveOffers为其分配计算资源:

  1. 有新任务提交时
  2. 有任务执行失败时
  3. 计算节点Executor不可用时
  4. 某些任务运行过慢需要为其重新分配资源时。

Executor:任务执行

最核心的三个类:

  • org.apache.spark.scheduler.DAGScheduler
  • org.apache.spark.scheduler.SchedulerBackend
  • org.apache.spark.scheduler.TaskScheduler

 

SchedulerBackend:分配当前可用计算资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pub.ryan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值