Spark调度模块

以前咱们提到:Driver 的sc负责和Executor交互,完成任务的分配和调度,在底层,任务调度模块主要包含两大部分:apache

1)DAGScheduler缓存

2 ) TaskScheduler网络

它们负责将用户提交的计算任务按照DAG划分为不一样的阶段而且将不一样阶段的计算任务提交到集群进行最终的计算。整个过程可使用下图表示并发

1.RDD Objects能够理解为用户实际代码中建立的RDD,这些代码逻辑上组成了一个DAG。框架

2.DAGScheduler主要负责分析依赖关系,而后将DAG划分为不一样的Stage(阶段),其中每一个Stage由能够并发执行的一组Task构成,这些Task的执行逻辑彻底相同,只是做用于不一样的数据。spa

在DAGScheduler将这组Task划分完成后,会将这组Task提交到TaskScheduler。blog

3.TaskScheduler经过Cluster Manager 申请计算资源,好比在集群中的某个Worker Node上启动专属的Executor,并分配CPU、内存等资源进程

4.接下来,就是在Executor中运行Task任务,若是缓存中没有计算结果,那么就须要开始计算,同时,计算的结果会回传到Driver或者保存在本地。内存

Scheduler的实现概述资源

任务调度模块涉及的最重要的三个类是:

1)org.apache.spark.scheduler.DAGScheduler  前面提到的DAGScheduler的实现。

将一个DAG划分为一个一个的Stage阶段(每一个Stage是一组Task的集合)

而后把Task Set 交给TaskScheduler模块。

2)org.apache.spark.scheduler.TaskScheduler

它的做用是为建立它的SparkContext调度任务,即从DAGScheduler接收不一样Stage的任务。向Cluster Manager 申请资源。而后Cluster Manager收到资源请求以后,在Worker为其启动进程

3)org.apache.spark.scheduler.SchedulerBackend

是一个trait,做用是分配当前可用的资源,具体就是向当前等待分配计算资源的Task分配计算资源(即Executor),而且在分配的Executor上启动Task,完成计算的调度过程。

4)AKKA是一个网络通讯框架,相似于Netty,此框架在Spark1.8以后已所有替换成Netty

任务调度流程图

相关文章
相关标签/搜索