宽依赖 & 窄依赖
在spark中,rdd间的依赖关系分为两种,宽依赖和窄依赖
wide:
父RDD的一个分区对应子RDD的一个分区
该转换过程的算子叫做窄依赖算子,比如map,filter,union,flatMap
narrow:
父RDD的一个分区对应子RDD的多个分区
该转换过程的算子叫做宽依赖算子,比如groupByKey. reduceByKey aggravateByKey
源码
abstract class Dependency[T] extends Serializable {
def rdd: RDD[T]
}
宽依赖 & 窄依赖在源码中的体现
为何要划分这个?
为了确定是否需要shuffle,进而可以划分stage.
lineage 血统
什么是血统?
RDD之间的依赖关系,这种关系链叫做血缘关系.该关系在DAG中维护.
这样当某一个分区数据丢失,
- 先看是否有缓存
- 在看是否有检查点
- 从上一个RDD重新计算,不需要从头计算.提高效率
DAG
有方向,没有回流的图,