流程
- spark客户端提交job
- 通过反射创建driver进程
- driver创建sparkContext对象
- 初始化sparkContext过程中,构建DAGScheduler和TaskScheduler
- TaskScheduler根据后台进程去连接Master向Master注册Application
- Master接收到Application的注册后,根据资源调度算法,在spark集群中为app启动多个executor
- master为每一个executor分配资源
- executor反向注册至driver,drvier完成sparkContext初始化、
- DAGScheduler根据任务进行job拆解成DAG图,划分stage
- TaskScheduler根据stage划分taskset
- taskScheduler会把Taskset里面的每一个pipeline提交到executor中执行
- 每一个executor都有一个线程池 ,executor会从根据每一个线程运行给一个TaskRunner
- 每一个task根据partition执行算子和函数
分步骤拆解详细流程
提交任务
提交任务行为是由执行算子创建的,比如foreach,count,collect等,标志性的表现就是在这些算子的源码中有一条sc.runJob,而其他转化型算子返回的是rdd,并不执行run操作
DAG图创建
-
sc类中1928行runjob方法执行,会执行其中的dagScheduler的runJob方法
-
dagScheduler中的runJob方法核心模块是submitJob也就是提交job
Spark Job提交与执行详细解析

本文详细介绍了Spark作业提交的整个流程,包括任务提交、DAG图创建、计算Task运行的最佳位置以及TaskSet的创建。从driver进程的创建到executor的启动,再到DAGScheduler如何拆解任务为DAG图,以及TaskScheduler如何根据stage划分taskset并提交到executor执行。文章深入到源码层面,解析每个关键步骤的具体实现。
最低0.47元/天 解锁文章
971

被折叠的 条评论
为什么被折叠?



