Spark调度模块

147caa7920e90be883ff02634b7dbbf119d.jpg

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

1)DAGScheduler

2 ) TaskScheduler

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

a7dae112a10cd2acba1961b255ba12c5da2.jpg

1.RDD Objects可以理解为用户实际代码中创建的RDD,这些代码逻辑上组成了一个DAG。

2.DAGScheduler主要负责分析依赖关系,然后将DAG划分为不同的Stage(阶段),其中每个Stage由可以并发执行的一组Task构成,这些Task的执行逻辑完全相同,只是作用于不同的数据。

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

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

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

Scheduler的实现概述

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

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

任务调度流程图

6a6da99025a17af61219cb1be068eb2cb75.jpg

转载于:https://my.oschina.net/u/3701483/blog/3011165

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值