Spark-Core之Spark on standAlone 模式的执行过程详解

1. Spark on standAlone 模式(Client)

1.1 执行流程图

 

 

1.2 执行过程详解:

0.当需要提交一个任务到spark集群中时,spark-submit脚本会执行一个叫SparkSubmit的类,然后通过反射调用 我们设置的参数 -- class中的main方法,然后在main方法中new SparkContext

1. 将提交的信息发送给Master

2. master根据提交的applicatition的资源信息,先根据内存过滤出符合条件的Worker,然后在进行分配cores

3.master向worker进行通信,将需要的资源信息,applicatition的信息,Driver信息发送给Worker

4.Worker在收到Master发送的消息之后会根据需要的资源,启动Executor

 

6.worker启动好了之后会向driver进行反向注册

7.在driver端进行准备工作,创建RDD,调用RDD中的transformation算子,最后调用Action,在Action算子里面一定会调用runJob(),在该方法中会将最后一个RDD传入到该方法中

8.根据最后一个RDD从后往前推,根据RDD的依赖关系,划分stage,继续递归进去,最后递归的出口就是RDD在没有父RDD了(DAGSchedule根据依赖关系进行切分)

9.先提交前面的stage 在提交后面的stage,一个stage对应一个taskSet,一个taskSet可以有一到多个task(task的类型可以是ShuffleMapTask,也可以是resultTask),然后将taskset传递给TaskSchedule

10.TaskSchedule将TaskSet中的task进行序列化,然后根据Executor的资源情况,将序列后的task通过网络传输给Executor(其实是将Task用TaskDescription包装了一层)

11. 将序列化后的TaskDescription(里面包装这task发送给Executor)

12. Executor会将接收到TaskDescription 先反序列化,然后在用TaskRunner包装一层然后丢入线程池

13. 将TaskDesc中的task也反序列化,然后通过调用task的run方法,传入TaskContext ,然后根据Task的类型,如果是ShuffleMapTask,就调用run task(这一步骤是在executor中的线程池中完成)

14. 将数据线应用分区器,返回分区ID,然后写入AppendOnlyMap(内存中,默认达到5M溢写磁盘),最后生成两个文件,一个索引文件一个数据文件(这一步骤也是在executor中的线程池中完成)

15. 最后面的MapPartitionsRDD向shuffleRDD要数据,shuffleRDD获取到ShuffleReader,从上游拉取属于自己分区的数据,然后进行全局聚合,将聚合后的结果写入到HDFS中(这一步骤也是在executor中的线程池中完成)

 

2.知识补充:

什么是RPC通信:

通俗的来说就是不同进程之间方法的调用,不仅仅只是发消息,而是可以在两个进程之间调用方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值