spark提交过程分析(standalone模式)

本文详细介绍了Apache Spark应用程序的执行过程,包括SparkContext的构造、任务调度机制、Stage的划分算法以及Task的执行流程等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、构造SparkContext

5903023-ba766dd6df947763.png
Paste_Image.png

1.1. 在shell下,通过spark-submit命令将Application提交到集群,此时spark会通过反射的方式,创建和构造一个DriverActor进程出来(scala中的actor类似java的多线程)
1.2. Driver进程会执行我们提交的Application应用程序,一般情况下,先构造SparkConf,再构造SparkContext
1.3. SparkContext在初始化的时候,最主要的做的就是构造DAGScheduler和TaskScheduler。
1.4. TaskScheduler实际上,是会负责,通过它对应的一个后台进程,去连接Spark集群的Master进程注册Application,
1.5. Master接收到Application的注册请求后,会使用自己的资源调度算法(基于调度器standalone,Yarn,Mesos等都有不同的调度算法),在Spark集群的Worker上为这个Application启动Executor
1.6. Master通知worker启动Executor后,Worker会为Application启动Executor进程,
1.7. Executor启动之后,首先做的就是会将自己反向注册到TaskScheduler上去,到此为止SparkContext完成了初始化。

二、运行Application

5903023-c721a6d2fda0aa21.png
Paste_Image.png

2.1. 所有Executor都反向注册到Driver上之后,Driver结束SparkContext初始化,会继续执行我们编写的代码
2.2. 每执行一个Action就会创建一个job,job会提交给DAGScheduler
2.3 DAGScheduler会采用自己的stage划分算法将job划分为多个stage,然后每个stage创建一个TaskSet,在此过程中,stage划分算法非常重要,后续会进行详细研究。
2.4 DAGScheduler会将TaskSet传递给TaskScheduler,TaskScheduler会把TaskSet里每一个task提交到Executor上执行(task分配算法)
2.5 Executor每接收一个task都会用TaskRunner来封装task,然后从线程池里面取出一个线程,执行这个task,TaskRunner将我们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行Task。
2.6 Task有两种,ShuffleMapTask和ResultTask。只有最后一个stage是ResultTask,之前的stage,都是ShuffleMapTask.
2.7 所以,最后整个Spark应用程序的执行,就是将stage分批次作为taskset提交给executor执行,每个task针对RDD的一个parktition,执行我们定义的算子和函数,以此类推,直到所有操作执行完为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值