Application
使用 SparkSubmit 提交的个计算应用,一个 Application 中可以触发多次 Action,触发一次 Action 产生一个 Job,一个 Application 中可以有一到多个 Job
Job
Driver 向 Executor 提交的作业,触发一次 Acition 形成一个完整的 DAG,一个 DAG 对应一个 Job,一个 Job 中有一到多个 Stage,一个 Stage 中有一到多个 Task
DAG
概念:有向无环图,是对多个 RDD 转换过程和依赖关系的描述,触发 Action 就会形成一个完整的DAG,一个 DAG 对应一个 Job
Stage
概念:任务执行阶段,Stage 执行是有先后顺序的,先执行前的,在执行后面的,一个 Stage 对应一个TaskSet,一个 TaskSet 中的 Task 的数量取决于 Stage 中最后一个 RDD 分区的数量
Task
概念:Spark 中任务最小的执行单元,Task 分类两种,即 ShuffleMapTask 和 ResultTask
ShuffleMapTask输出的是shuffle分区结果
ResultTask输出的是最终结果
Task 的数量决定并行度,同时也要考虑可用的 cores
task中就是对FinalRdd(最后一个RDD)的迭代器的调用。
TaskSet
保存同一种计算逻辑多个 Task 的集合,一个 TaskSet 中的 Task 计算逻辑都一样,计算的数据不一样
- spark源头Rdd会将数据源切分成多个分片并行处理,那么就有4个算子链
- 将算子链根据是否shuffle进行拆分,reduceBykey会进行shuffle操作,因此产生两个stage
- 第一个stage包含4个分区用4个task调度,这四个task就组成了一个taskset,这4个task不对外输出,只是中间流程,因此叫做shuffleMapTask
- 第二个由于reduceByKey修改了分区数,所以变成了两个分区,那就用两个task调度,这两个task就组成了另一个taskset,这两个task是对外输出的因此叫做ResultTask