SparkCore之RDD之间的依赖关系(血缘)详解

  • 1-什么是依赖关系(血缘关系)
    • 通过构建依赖关系可以实现RDD的容错
    • 子RDD依赖于父RDD
  • 2-为什么需要依赖关系
    • 因为Spark是基于RDD的并行计算框架
    • RDD不可变 可分区 可并行计算的集合
    • 通过划分为宽依赖和窄依赖可以在窄依赖过程中实现RDD分区的并行计算
    • 但是在宽依赖的部分需要从上一个RDD的不同分区拉取数据,在Shuffle阶段无法实现并行计算
  • 3-依赖关系有几种?
    • 窄依赖:NarrowDependency
    • 宽依赖:ShuffleDependency
  • 4-如何判断一个依赖是窄依赖还是宽依赖?
    • 通过一个父RDD跟一个子RDD对应,窄依赖
    • 通过一个父RDD跟多个子RDD对应,宽依赖

在这里插入图片描述
在这里插入图片描述
这里有一个面试题: 子RDD的一个分区依赖多个父RDD是宽依赖还是窄依赖?
1) 不能确定,也就是宽窄依赖的划分依据是父RDD的一个分区是否被子RDD的多个分区所依赖,是,就是宽依赖,或者从shuffle的角度去判断,有shuffle就是宽依赖,如Join

5-Spark设计依赖关系目的是什么?

  • 为了能够Spark并行计算,是划分Stage的依据
  • 为了构建血缘关系进行RDD的容错,一个分区数据丢失,只需要从父RDD的对应1个分区重新计算即可
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/112647243