大数据——Spark任务执行流程

Spark任务的执行流程文字详细描述

通过对比和阅读源码,我们大致将Spark任务提交到运行分为以下20步进行描述,具体过程如下:

1.将我们编写的程序打成jar包

2、调用spark-submit脚本提交任务到集群上运行

3、运行Sparksubmit的main方法,在这个方法中通过反射的方式创建我们编写的主类的示例对象,然后调用mian方法,开始执行我们的代码(注意:我们的spark程序中的driver就运行在sparkSubmit进程中)

4、当代码运行到创建SparkContext对象时,那就开始初始化SparkContext对象了

5、在初始化SparkContext对象的时候,会创建两个特别重要的对象,分别是DAGScheduler和TaskScheduler

DAGScheduler的作用:将RDD的依赖切分成一个一个的stage,然后将stage作为taskSet提交给TaskScheduler

6、在构建TaskScheduler的同时,会创建两个非常重要的对象,分别是DriverActor和ClientActor

ClientActor的作用:向master注册用户提交的任务

DriverActor的作用:接受executor的反向注册,将任务提交给executor

7、当DriverActor启动后,会将用户提交的任务和相关参数封装到ApplicationDescription对象中,然后提交给master进行任务的注册

8、当master接受到clientActor提交的任务请求时,会将请求参数进行解析,并封装成Application,然后将其持久化,然后将其加入到任务队列waitingApps中

9、当轮到我们提交的任务运行时,就开始调用schedule(),进行任务资源的调度

10、Master将调度好的资源封装到launchExecutor中发送给指定的worker

11、Worker接受到Master发送来的launchExecutor时,会将其解压并封装到ExecutorRunner中,然后调用这个对象的start(),启动Executor

12、Executor启动后会向DriverActor进行反向注册

13、driverActor会发送注册成功的消息给Executor

14、Executor接受到DriverActor注册成功的消息后会创建一个线程池,用于执行DriverActor发送过来的task任务

15、当属于这个任务的所有的Executor启动并反向注册成功后,就意味着运行这个任务的环境已经准备好了,driver会结束SparkContext对象的初始化,也就意味着new SparkContext这句代码运行完成

16、当初始化sc成功之后,driver端就会继续运行我们编写的代码,然后开始创建初始化的RDD,然后进行一些列转换操作,当遇到一个action算子时,也就意味这触发了一个job

17、Driver会将这个job提交给DAGScheduler

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

19、DriverActor接受到DAGScheduler发送过来的task,会拿到一个序列化器,对task进行序列化,然后将序列化好的task封装到launchTask中,然后将launchTask发送给指定的Executor

20、Executor接受到了DriverActor发送过来的launchTask时,会拿到一个反序列化器,对launchTask进行反序列化,封装到TaskRunner中,然后从Executor这个线程池中获取一个线程,将反序列化好的任务中的算子作用到RDD对应的分区上

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值