spark task 流程

1:提交jar到hdfs

2:调用spark-submit提交任务到集群

3:运行sparkSumbit的main方法,其通过反射的方式创建我们的程序,并执行main方法,开始执行我们的程序

4:当代吗运行到SparkContext对象时,开始初始化SparkContext对象

5:初始化SparkContext的时候,会创建两个重要的对象:DAGScheduler和TaskScheduler。DAGScheduler的作用是将RDD的依赖切分成一个一个的stage,然后将stage作为TaskSet提交给DriverActor
6:创建TaskScheduler的同事,会创建两个重要对象:DriverActor和ClientActor。ClientActor向master注册用户提交的任务;DriverActor接收executor的反向注册,将任务提交给executor
7:clientActor将任务封装到ApplicationDescription对象并且提交给Master
8:当Master收到任务信息后,将请求参数进行解析,并封装成Application,然后将其持久化,然后将其加入任务队列waitingApps中
9:当轮到我们的提交的任务运行时,就开始调用schedule运行任务调度
10:master将调度好的资源封装到LaunchExecutor并发送给对应的worker
11:worker接收到master发送来的任务调度信息(LaunchExecutor),将信息封装成一个ExecutorRunner对象,并调用其start启动executor(开始启动GoarseGrainedExecutorBackend对象)
12:executor启动后会反向DriverActor进行反向注册
13:DriverActor会发送注册成功的消息给executor
14:executor接收到成功消息后会创建一个线程池,用于执行DriverActor发送过来的task
15:当属于这个任务的所有executor启动并反向注册成功后就意味着运行这个任务的环境已经准备好了,driver会结束SparkContext的初始化。

16:当sc初始化成功后,driver继续运行代码,开始创建RDD,然后进行一系列的转换,当遇到一个action算子时,就会触发一个job

17:driver会将这个job提交给DAGScheduler

18:DAGScheduler将接受的job,从最后一个算子向前推导,将DAG依据宽依赖划分成一个个的stage,然后将stage封装成taskSet,并将其中的task提交给DriverActor

19:DriverActor接收到task,会拿到一个序列化器,对task进行序列化,然后封装到LaunchTask中,将其发送给指定的exector
20:Executor接收到LaunchTask,拿到反序列化器,对其反序列化,并封装到TaskRunner中;然后从executor线程池取一个线程,将反序列化好的任务中的算子作用在RDD对应的分区上
 

图片
标题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值