spark任务提交流程

1、编写程序打成jar包

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

3、发送请求到ResourceManager,请求启动applicationMaster

4、RS接收到请求后在集群上选择一个合适的NameNode节点,启动ApplicationMater

5、运行spark-submit的main方法,通过反射的方式创建主类的实例对象,然后调用main方法,开始执行代码

6、代码创建sparkcontext对象并对其初始化,同时创建DAGScheduler(将rdd依赖切分成一个个的stage)和TaskScheduler(将stage作为taskSet提交给DriverActor)

6.1、在创建TaskScheduler时,会创建DriverActor(接受executor的反向注册,将任务提交给executor)和ClientActor(像master注册用户提交的任务)

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

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

9、当轮到提交的该任务时,调用scheduler,进行任务资源的调度

10、master将调度好的资源封装到launchExecutor时,会将其发送给指定的worker

11、worker接收到master发送来的launchExecutor时,将其解压并封装到ExecutorRunner中,然后调度这个对象的start,启动Executor

12、会向ResourceManager发送请求一批container,用于启动Executor

13、ResourceManager接收到请求,返回一批NameNode,用来启动Executor

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

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

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

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

18、初始化sparkContext成功后,driver继续运行代码,然后创建初始化的RDD,然后进行一系列的转换操作,当遇到一个action算子,就触发job

19、driver会将这个job提交给DAGScheduler,DAGScheduler接受job并从最后一个算子向前推导,将DAG一句依赖划分为一个个的Stage,将stage交给TaskScheduler

20、TaskScheduler依据资源量和出发分配条件,将stage封装到taskSet,为TaskSet分配资源并触发执行,将task提交给DriverActor

21、DriverActor将task序列化并且封装到launchTask中,将launchTask发送给Executor

22、Executor接收到DriverActor的launchTask时,会拿到一个反序列化器,对launchTask进行序列化,封装到TaskRunner中,然后熊Executor这个线程池中获取线程,将反序列化的任务中的算子作用到rdd对应的分区上

简化流程

1、编写程序打成jar包

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

3、发送请求到ResourceManager,请求启动applicationMaster

4、RS接收到请求后在集群上选择一个合适的NameNode节点,启动ApplicationMater

5、构建Spark Application的运行环境,sparkContext向资源管理器申请Executor资源

6、资源管理器分配Executor资源并启动StandaloneExecutorBacked,executor运行情况将随着心跳发送到资源管理器上

7、SparkContext构建成DAG图,将DAG图分解成Stage,并把Task发送给Task SCheduler,Executor 向SparkContext申请Task

8、Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor

9、Task在Executor上运行,运行完毕释放所有资源

ambari spark怎样提交项目 spark的提交任务流程_spark