Spark RDD 依赖关系

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16103331/article/details/53397868

Spark RDD的依赖关系

  • RDD之间的依赖关系分为两种,分别是NarrowDependency与ShuffleDependency,其中ShuffleDependency为子RDD的每个Partition都依赖于父RDD的所有Partition,而NarrowDependency则只依赖一个或部分的Partition。下图的groupBy与join操作是ShuffleDependency,map和union是NarrowDependency。
  • 窄依赖(narrow dependencies):
    子RDD的每个分区依赖于常数个父分区(与数据规模无关)
    输入输出一对一的算子,且结果RDD的分区结构不变。主要是map/flatmap
    输入输出一对一的算子,但结果RDD的分区结构发生了变化,如union/coalesce
    从输入中选择部分元素的算子,如filter、distinct、substract、sample
  • 宽依赖(wide dependencies):
    子RDD的每个分区依赖于所有的父RDD分区
    对单个RDD基于key进行重组和reduce,如groupByKey,reduceByKey
    对两个RDD基于key进行join和重组,如join
    经过大量shuffle生成的RDD,建议进行缓存。这样避免失败后重新计算带来的开销。
    注意:reduce是一个action,和reduceByKey完全不同。

这是社区说明图片


接下来看我们的举例说明

  • 我们看到了,在上述的RDD lineage(家族) 中pairRDD 之前,pairRDD中的partition它的父RDD (wordsRDD)中的 parttion是一一对应的,wordsRDD中的某一个partition和它的父RDD(linesRDD)中的partition是一一对应的,那么也就是说,子RDD中的一个partition的数据只来源于父RDD中的相应的一个partition,而且这个父partition也只能去这个子partition,我们把这种RDD之间的关系称之为窄依赖(Narrow Dependency)
  • 和窄依赖相对应的,就是说子RDD中的某一个partition中的数据都要从父RDD中的所有的partition中拉取,也就是说每一partition都依赖于父RDD中所有partition,我们把这种RDD的依赖关系称之为宽依赖(Shuffled Dependency 或者 Wide Dependency)

窄依赖:父子RDD partition的对应关系: 1 : 1
宽依赖: 父子RDD partition的对应关系: 1:N

Spark Application Stage 的划分算法: 从action 往前走遇到一个宽依赖,就是一个stage,stage从stage0开始

展开阅读全文

没有更多推荐了,返回首页