1>spark的作业主要是由rdd的action所触发作业的提交,根据提交作业构建DAG图。将作业提交给sparkcontxt,在sparkcontext会创建2个重要组件,一个是dagscheduler和taskscheduler组件。最终运行sc.runjob将作业提交给Dagscheduler
2>Dagscheduler会根据DAG图进行stage的划分
划分原理:dagscheduler调用handlejob.submit方法=>在该方法中根据dag图寻找到最后一个finaldd,=>以最后一个rdd为起点,去遍历rdd生命线,在遍历的过程中查找是否存在shufflerdd(如果存在就进行作为stage的划分依据)=》直到遍历到第一个rdd为止 =>stage划分完之后=>建立stage和stage的依赖关系,并放到list的集合中,作为后续调度的依据
3>dagscheduler将每个stage划分为多个task(按照分区划分),并给出每个task执行的首选位置,将这些task封装为taskset
4>Dagscheduler将这些已经封装好的taskset发送给taskscheduler,taskscheduler会将这些taskset放入到taskset缓冲迟中,其实现类taskschedulerimpl会创建tasksetmanager来进行管理taskset(主要管理taskset的生命周期) tas