11. spark源代码分析(基于yarn cluster模式)- 聊聊Stage和Task

通过前面的分析,我们了解到,在Spark中只存在两种Stage:

  • ResultStage
  • ShuffleMapStage

Stage之前划分的条件是遍历当前RDD和父RDD的依赖列表,如果遇到了ShuffleDependency则进行Stage的划分,Spark中最后一个Stage永远都是ResultStage,其他的都是ShuffleMapStage。
每个ShuffleMapStage都对应一个ShuffleMapTask
而每个ResultStage都对应一个ResultTask
我们经常说一个Stage对应了多个Task,这里在源代码层面来说,Master节点都是根据待计算的RDD的分区数量来生成Task,一般一个分区对应一个Task,么个task会包含需要执行的节点信息,然后Master节点会将这些Task发往对应的Executor节点去执行Task任务。
在谈谈Spark中的依赖,从大的层面来说,Spark中只有两种依赖:

  • NarrowDependency 这就是我们常说的窄依赖
  • ShuffleDependency 这就是我们常说的宽依赖

其他的:

  • OneToOneDependency 继承自NarrowDependency
  • PruneDependency 继承自NarrowDependency
  • RangeDependency 继承自NarrowDependency

这里只有遇到ShuffleDependency类型才会进行Stage划分,也就会发生我们常说的MapReduce操作。

这里的:

  1. OneToOneDependency就是父RDD和子RDD的分区一一对应
  2. RangeDependency多个父RDD和子RDD的分区一一对应
  3. PruneDependency父RDD的某几个分区和子RDD一一对应

Guess you like

Origin blog.csdn.net/LeoHan163/article/details/121100686