spark中宽依赖和窄依赖

https://www.jianshu.com/p/736a4e628f0f

1.1 窄依赖

窄依赖是指1个父RDD分区对应1个子RDD的分区。换句话说,一个父RDD的分区对应于一个子RDD的分区,或者多个父RDD的分区对应于一个子RDD的分区。所以窄依赖又可以分为两种情况:

  • 1个子RDD的分区对应于1个父RDD的分区,比如map,filter,union等算子
  • 1个子RDD的分区对应于N个父RDD的分区,比如co-partioned join

1.2 宽依赖

宽依赖是指1个父RDD分区对应多个子RDD分区。宽依赖有分为两种情况

  • 1个父RDD对应非全部多个子RDD分区,比如groupByKey,reduceByKey,sortByKey
  • 1个父RDD对应所有子RDD分区,比如未经协同划分的join

2. 为什么Spark将依赖分为窄依赖和宽依赖

2.1 窄依赖(narrow dependency)

可以支持在同一个集群Executor上,以pipeline管道形式顺序执行多条命令,例如在执行了map后,紧接着执行filter。分区内的计算收敛,不需要依赖所有分区的数据,可以并行地在不同节点进行计算。所以它的失败恢复也更有效,因为它只需要重新计算丢失的parent partition即可

2.2 宽依赖(shuffle dependency)

则需要所有的父分区都是可用的,必须等RDD的parent partition数据全部ready之后才能开始计算,可能还需要调用类似MapReduce之类的操作进行跨节点传递。从失败恢复的角度看,shuffle dependency牵涉RDD各级的多个parent partition



posted @ 2020-03-09 15:06  再见傅里叶  阅读(2219)  评论(0编辑  收藏  举报