何为依赖?

由于RDD是粗粒度的操作数据集,每个Transformation操作都会生成一个新的RDD,所以RDD之间就会形成类似流水线的前后依赖关系;RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。如图所示显示了RDD之间的依赖关系????
【Spark】SparkCore解析(一):宽依赖和窄依赖

窄依赖:是指每个父RDD的每个Partition都只被子RDD的一个Partition使用 ,即父类RDD的一个Partition与子类RDD的一个Partition形成一对一的关系。例如map、filter、union等操作都会产生窄依赖

宽依赖:是指一个父RDD的Partition会被子RDD的多个Partition所使用,即父类RDD的一个Partition与子类RDD的Partition形成一对多的关系。例如 groupByKey、reduceByKey、sortByKey等操作会产生宽依赖,会产生shuffle

注意:join操作有两种情况:如果两个RDD在进行join操作时,一个RDD的partition仅仅和另一个RDD中已知个数的Partition进行join,那么这种类型的join操作就是窄依赖,例如图1中左半部分的join操作(join with inputsco-partitioned);其它情况的join操作就是宽依赖,例如图1中右半部分的join操作(join with inputsnot co-partitioned),由于是需要父RDD的所有partition进行join的转换,这就涉及到了shuffle,因此这种类型的join操作也是宽依赖

总结

在这里我们是从父RDD的partition被使用的个数来定义窄依赖和宽依赖,因此可以用一句话概括下:如果父RDD的一个Partition被子RDD的一个Partition所使用就是窄依赖,否则的话就是宽依赖。因为是确定的partition数量的依赖关系,所以RDD之间的依赖关系就是窄依赖;由此我们可以得出一个推论:即窄依赖不仅包含一对一的窄依赖,还包含一对固定个数的窄依赖。

一对固定个数的窄依赖的理解:即子RDD的partition对父RDD依赖的Partition的数量不会随着RDD数据规模的改变而改变;换句话说,无论是有100T的数据量还是1P的数据量,在窄依赖中,子RDD所依赖的父RDD的partition的个数是确定的,而宽依赖是shuffle级别的,数据量越大,那么子RDD所依赖的父RDD的个数就越多,从而子RDD所依赖的父RDD的partition的个数也会变得越来越多。

相关文章:

  • 2021-10-29
  • 2021-06-01
  • 2021-12-12
  • 2021-08-04
  • 2021-08-30
  • 2021-11-23
猜你喜欢
  • 2022-01-08
  • 2021-11-26
  • 2021-07-23
  • 2022-03-05
  • 2021-11-16
  • 2021-09-22
相关资源
相似解决方案