就是用户编写的Spark应用程序,提交到Spark后,Spark为Application分配资源,将程序转换并执行;其中,一个Application包含多个Job;
由Action算子触发生成的由一个或多个Stage组成的计算作业;
这些Action算子主要包括:reduce、collect、count、first、take、takeSample、takeOrdered、saveAsTextFile、saveAsSequenceFile、saveAsObject、countByKey;
调度阶段,一个taskSet对应的调度阶段,每个Job会根据RDD的宽依赖关系被切分为Stage,每个Stage都包含一个taskSet;
导致Shuffle的算子:repartition, repartitionAndSortWithinPartitions, coalesce, reduceByKey, groupByKey, sortByKey, join, cogroup等。这些算子主要分为三类:
1.重分区:一般情况下重分区都会导致Shuffle,须在整个集群中对之前所有的分区数据进行随机、均匀的打乱,然后放入下游指定分区内;
2.ByKey:因为要对一个Key进行聚合操作,则要保证集群中所有节点上相同的key,一定是到同一个节点进行处理;
3.join:两个RDD进行join,必须将相同key的数据Shuffle到同一个节点上,再进行相同key的两个RDD数据的笛卡尔积;
一组关联的,但相互之间没有Shuffle关系的Task集合;
RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元。
Stage和Task关系:Stage可以理解为一个MapReduce处理,每个Stage里的Task都可以在一个Executor中完成而不需要Shuffle;
Shuffle:map + reduce ——>数据重发
注:图为原创,如有转载请注明出处。