spark提交任务的流程
1.spark任务提交阶段划分
spark提交任务分为五个状态,五个状态之间的有四个转换过程:
(1)根据代码中的Transformations确定RDD。
(2)根据RDD确定RDD的类型和它们之间的血统关系,生成一个DAG。
(3)将DAG提交给DAGScheduler来划分出不同的task,以及task执行顺序和依赖关系。
(4)TaskScheduler调度任务,采用集群中配置的调度方式完成task调度。最后任务的执行交给了worker
注意:当任务发生执行失败的时候,taskSchduler负责开启一个新的task去继续执行那个任务。哪个先返回结果则停止。
2.wordcount的执行过程
(1)根据wordcount代码可以划分为:
HadoopRDD(textFile())->MapPartitionsRDD(flatMap())->MapPartitionsRDD(map())->ShuffledRDD(reduceByKey())->MapPartitionsRDD(saveAsTextFile())
sc.textFile(args(0)).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile(args(1))
(2)stage:明显,wordcount的执行流程分为两个stage,因为产生了一次shuffle,左右一边一个stage。
(3)task:某个stage中的在同一个partitioner中完成的任务被划分为了一个task。
3.stage划分
宽依赖是划分Stage的依据。
问:为什么图中有三个stage?
答:G的执行必须要以F和B的结果作为依赖,不仅要B执行结束,F也要执行结束。因此B和F分为两个stage1和stage2产生的结果为stage3。