Spark 宽窄依赖 源码分析

1、最顶级类-org.apache.spark.Dependency

抽象类Dependency,继承了序列化类,定义了rdd方法。

Spark 宽窄依赖 源码分析_第1张图片

Dependency 有两个实现类:抽象类NarrowDependency(窄依赖)和 ShuffleDependency(宽依赖)。

2、窄依赖:NarrowDependency

NarrowDependency也是抽象类,提供获取getParents 和 rdd 方法,构造方法需要传入rdd。rdd方法默认返回传入的rdd,getParents方法需要传入分区id。

Spark 宽窄依赖 源码分析_第2张图片

NarrowDependency 有 OneToOneDependency(一对一依赖) 和 RangeDependency(区间依赖)。

2.1 一对一依赖 OneToOneDependency

OneToOneDependency 实现了getParents方法,返回一个List,List只包含当前的分区id。

Spark 宽窄依赖 源码分析_第3张图片

2.2 范围依赖RangeDependency

RangeDependency增加了构造方法参数,同样实现getParents方法,但getParents方法返回结果中对partitionId做了计算。

Spark 宽窄依赖 源码分析_第4张图片

3、依赖生成

Dependency实际是在RDD中生成,不同的RDD算子,会构造不同的RDD,RDD通过dependencies方法获取或生成依赖。

RDD中map方法:

Spark 宽窄依赖 源码分析_第5张图片

RDD的依赖获取:

Spark 宽窄依赖 源码分析_第6张图片

ShuffledRDD的依赖获取:

Spark 宽窄依赖 源码分析_第7张图片

你可能感兴趣的:(大数据,Spark,宽窄依赖,源码分析)