Spark_调度流程

在这里插入图片描述

1> 将我们编写好的代码打成jar包,提交到集群上运行。

2> 执行spark-submit脚本

3> 调用sparkSubmit这个类的main方法,在main方法中通过反射的方式,
创建我们自己spark作业的主类实例对象。
然后调用main方法,开始执行我们自己写的代码。

4> 开始初始化sparkContext对象,在初始化sparkContext对象时会创建
两个重要的对象(DAGScheduler,TaskScheduler)

5> 将请求参数封装成ApplicationDescription对象,向master进行任务
的注册。

6> master接受到driver的clientActor的注册请求时,会将请求参数进
行封装,封装成app,然后加入到master的任务队列中。

7> 加入到队列后,将app进行持久化

8> 当轮到我们提交任务开始执行时,会调用scheduler()这个方法,
进行任务调度和资源分配。

9> master将分配好的资源封装到launchExecutor中,
发送到指定的worer上。

10> worker接收到master发送过来的LaunchExecutor时,
将其解析并封装到ExecutorRunner中。

11> 调用Executor的start方法,在这个方法中,创建了一个线程,
在这个线程的run方法中启动了一个用于执行任务的容器(进程)

12> executor启动成功后向DriverActor反向注册。

13> 发送反向注册成功的消息

14> 接收到driverActor发送过来的注册成功的消息后,会创建一个线程池,
这个线程池用于执行driverActor发送过来的任务。

15> 当属于这个任务的所有Executor都反向注册成功后,Driver会结束
sparkContext对象的初始化,继续运行我们自己编写的代码。

16> driver端结束sparkContext初始化工作后,开始执行我们编写的代码。
然后开始创建rdd的依赖关系,当遇到一个action算子时,就意
味着触发一个job,然后driver会将这个job提交给DAGScheduler

17> DAGscheduler接收到这个Job时,开始对着job的rdd依赖关系进行划分,
划分成一个一个stage,然后将stage封装成taskSet,
提交给DriverActor。

18> 将taskSet发送给DriverActor

19> DriverActor接收到dagScheduler发送过来的taskSet时,开始对
taskSet中的每个task进行序列化,然后将序列化好的task封装成
LaunchTask,发送给指定的executor

20> executor接收到driverActor发送过来的launcuTask时,会将其解
析并封装到RunnerTask中,然后从线程池中获取一个线程,
进行反序列化。然后执行我们编写的算子。将这些算子作用在其保存
的rdd的分区上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值