流程
- 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方法