spark内核解析4-standalone下任务生成和提交流程

目录

流程

此流程是我几年前看的1.6的代码画的,2.x有所更新,但是基本和这个出入不大
在这里插入图片描述

Driver端:
1.调用SparkSumbit类,执行main(),接收调用者传递过来的参数,匹配 提交|杀死|查看任务 ,执行doRunMain(),用Class.forName通过反射拿到目标类,获取main(),调用 invoke()通过反射执行main
2.构建SparkContext对象,在SparkContext入口类
创建了SparkEnv对象(为了创建actorSystem对象)
创建了TaskScheduler对象和backend任务调度器,用来生成并发送task给Executor
创建了DAGScheduler对象,用来划分Stage
当taskSchedular调用start()时开始执行,backend对象会创建两个actor,driverActor和clientActor
driverActor负责和Executor通信,接收Executor反向注册和把任务发送到Executor
clientActor负责和Master通信,向Master注册任务信息
3.clientActor把任务信息封装到ApplicationDescription对象提交到Master

Master端
4.Master收到任务信息后,把任务信息存到内存后再放到队列里
5.当执行这个任务信息,调用schedular(),开始资源调度
需要判断worker的剩余内存和节点是否都满足条件
6.把调度的资源封装到LaunchExecutor发送给Worker

Worker端:
7.Worker接收到Master发送的调度信息,把信息在封装为ExecutorRunner对象
8.调用ExecutorRunner的start(),开始启动CoarseGrainedExecutorBackend对象
9.创建属于Executor的actor,通过driverUrl获取driver端的actor,开始进行反向注册向driveractor发送注册消息

Executor:
10.与DriverActor注册成功后,创建一个线程池(ThreadPool),用来执行任务
11.当所有的Executor注册完成后,意味着作业环境准备好了,Driver端会结束与SparkContext对象的初始化
DAGScheduler
12.当Driver初始化完成后(创建一个sc实例),会继续执行我们自己提交的APP的代码,当触发了Action的RDD算子时,就触发了一个job,这时就会调用DAGScheduler对象进行stage划分
13.DAGScheduler开始进行Stage划分
划分stage
调用了dagSchedular.runJob() -->
任务调度器队列,循环取出里面的内容eventProcessLoop.post -->
调用dagSchedular提交作业handleJobSumbmit() -->
根据finalRDD获取父RDD getParentStages -->
找到finalRDD的所有的父RDD,循环取出父RDD,判断有没有发生shuffle,没有就递归,找到所有的父RDD
14.将划分好的Stage按照分区生成一个一个的task,并且封装到TaskSet对象,然后TaskSet提交到TaskScheduler
15.TaskScheduler接收到提交过来的Taskset,拿到一个序列化器,对TaskSet序列化,将序列化好的TaskSet封装到LaunchExecutor并提交到DriverActor
16.把LaunchExecutor发送到Executor上

Executor:
17.Executor接收到DriverActor发送过来的任务(LaunchExecutor),会将其封装成TaskRunner,然后从线程池中获取线程来执行TaskRunner
18.TaskRunner拿到反序列化TaskSet.然后执行APP代码,也就是对RDD分区上执行的算子和自定义函数

ClientActor:负责和Master通信,向Master注册任务信息
DriverActor:负责和Executor进行通信,接收到 Executor反向注册和把任务发送到Executer。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

orange大数据技术探索者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值