开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段: Spark 原理_逻辑图_窄依赖的分类_看源码】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12018
Spark 原理_逻辑图_窄依赖的分类_看源码
内容简介
一、回顾
二、依赖类的继承关系
三、Narrowdependency 的继承类
一、回顾
1.目前,已经学习了很多关于宽窄依赖的内容,及其二者的判断依据,本节我们会学习一些关于窄依赖的扩展,为其划分类别
2.我们已经学习了一些宽窄依赖之间的判断依据,最重要的是是否 shuffle,而判断 shuffle 其中很重要的一个依据为是否多对一,但多对一的分区间也可以是窄依赖,接下来,我们将会学习窄依赖的类型,除此之外的类型就是宽依赖
3.窄依赖的类别
(1)依赖类的继承关系
(2)一对一窄依赖
(3)range 窄依赖
(4)一对多窄依赖
//都是分区之间的关系
//对于宽窄依赖在什么时候用,有什么作用,会在物理执行图方面进行详细的讲解
二、依赖类的继承关系
1.打开源码
(1)关闭所有源码类
(2)窄依赖在哪个 class 内定义?按两下 shift,在输入框中搜索 dependency,所有宽窄依赖的类都在 dependency scala 文件中被定义,如下:
(3)打开 dependency scala 文件,可以看到 abstract class 这样一个抽象类,获取 rdd
2.举例
RddA 与 rddB 之间存在依赖关系,对象为 dependency
Dependency 对象在 rddB 的 getdependency 中返回
RddA 与 rddB 之间的依赖关系是 dependency 来定义的
通过 dependency 可以得到 rddB 依赖的 rddA,所以 dependency 中有方法可以获取到 RDD 的另一端
窄依赖有两个低层级的继承类
3. 窄依赖的定义
Abstract class 的 narrowdependency 就是窄依赖的意思
# Child RDD depends a smalle namber 子 RDD 依赖一个比较小的数字
解释:窄依赖是一个基类,子 RDD 中的分区,依赖较少的父 RDD 中的分区 ,一般一个子 RDD 依赖两个、三个或一个父 RDD 的分区,称为窄依赖
只应用这个标准也不对,最终还是要看是否 shuffle
4.两个 dependency 第一级别的继承类
(1)窄依赖
(2)宽依赖
补充:准确来说依赖关系有两种:窄依赖和 shuffle 依赖,通常为了方便俗称为窄依赖和宽依赖
三、Narrowdependency 的继承类
1.onetoonedependency
2.rangedependency
日常出现的问题可以通过观看源码解决,通过源码可以获得很多东西,为什么要去看源码?
正常情况下,我们的流程、正常思路,是希望不通过看源码就能了解它是什么,看源码不论在工作中,还是思考原理性问题时,通常源码的内容才是最准确的,通过网络获得的零散内容,并不是很准确,或是版本不同,观看源码还是有必要的。
以上是整个源码部分的表现