Spark学习(四):核心模块之Scheduler详解
1. 核心模块——Scheduler整体介绍
(1)Scheduler分类:
•Scheduler模块分为两大主要部分,DAGScheduler和TaskScheduler。
(2)Scheduler整体流程图
(3)针对流程的解释:
1)创建RDD,经过一系列Transformation,最后Action
2)Action会出发SparkContext的runJob方法,交给DAGScheduler处理
3) DAGScheduler将DAG生成Stage
4)将Stage交给TaskScheduler
5)本地或者集群的Executor上运行
2. 核心模块——Scheduler之DAGScheduler
DAGScheduler把一个spark作业转换成成stage的DAG(Directed Acyclic Graph有向无环图),根据RDD和stage之间的关系,找出开销最小的调度方法,然后把stage以TaskSet的形式提交给TaskScheduler。
3. 核心模块——Scheduler之TaskScheduler
TaskScheduler的核心任务是:
接收DAGScheduler的Task请求,分发Task到集群运行并监控运行状态,并将结果以event的形式汇报给DAGScheduler 。
TaskScheduler的实现:
TaskScheduler是trait,无具体实现,仅仅为对外统一接口。任务调度模块基于两个Trait:TaskScheduler和 SchedulerBackend
TaskScheduler的工作流程图如下:
流程图核心过程介绍:
1)Task调度与低层的资源管理器分离,仅仅根据提供的资源调度task,不关心资源的来源。
2)资源调度仅仅关心资源,与多种不同的资源调度系统(YARN/MESOS/Standalone)交互,获得空闲资源。
3)TaskSchedulerImp在接收到submitTasks时,从资源调度系统中获取到空闲资源,然后将空闲资源提交到到task调度系统,调度满足locality要求的task,并将task launch到executor。