Spark 原理_逻辑图_宽窄依赖判断 | 学习笔记

简介: 快速学习 Spark 原理_逻辑图_宽窄依赖判断

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段Spark 原理_逻辑图_宽窄依赖判断】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/12017


Spark 原理_逻辑图_宽窄依赖判断


内容简介

一、判断是否有 shuffle 的技巧

二、判断宽窄依赖步骤

三、源码判断

四、宽窄依赖判断依据总结

 

接下里会介绍款窄依赖如何分辨,什么时候是宽依赖,什么时候是窄依赖,宽窄依赖的分辨只有一种方式:是否含有 shuffle,看是否有 shuffle 有一些技巧

 

一、判断是否有 shuffle 的技巧

举例

1.笛卡尔积

image.png

例如 RddC p1 看似依赖了两个分区,但这两个分区并不在同一个 rdd 中, rddC 中的 p1 依赖了 rddA 中的一个分区 p1,和rddB 中的一个分区 p1,所以可以说 rddC 来源于一个分区。

2.ReduceByKe

image.png

例如 rddB 中的 p1 分区,依赖了 rddA 中的三个分区 p1p2p3,依赖了多个分区。

判断标准

Shuffle 的子 RDD 中的分区与父 RDD 之间的分区是一对一,还是多对一

结论

如果两个分区之间是一对一的关系,那么这两个分区之间是窄依赖关系

如果两个分区之间是多对一的关系,那么这两个分区之间是宽依赖关系

如图两个分区是一对一,绝对是窄依赖

image.png

如图两个分区间是分发的关系,需要通过经验判断,极有可能是宽依赖

image.png

两个分区之间一对一,绝对是窄依赖;多对一并不一定是宽依赖

 

二、判断宽窄依赖步骤

1.  看是否是一对一关系,是一对一,那么就是窄依赖

2.  不是一对一,而是多对一,不能确定

3.  看两个 RDD 的分区之间是单纯的数据流动,还是分发的复制,窄依赖是单纯的数据流动,而宽依赖则是分发和复制

如图这种情况是窄依赖

image.png

这种情况属于宽依赖

image.png

但是这样判断其实不准确,如果想分辨某个算子是否是窄依赖,或者是否是宽依赖,则还是要取决于具体的算子。

 

三、算子判断

例如,1.判断 cartesian 算子生成的 RDD 是宽依赖或窄依赖

直接点击进入生成的 cartesianRDD 中,找到 dependence,如下

image.png

2.  判断 map 算子生成的 RDD 是宽依赖还是窄依赖

(1)点击进入 map 算子,可以看到生成的 mappartitionRDD,点击进入

// mappartitionRDD 是宽依赖还是窄依赖就在其 rdd 中定义

image.png

2)可以看到没有 dependence,这说明是在 RDD 的父类中,点击进入 RDD,可以看到父类里有一个构造函数(mappartition 的构造函数)

3)点击进入 this,可以看到在之前构造中传的 dependency 列表

4)可以看到主构造里的 list 传了一个 OneToOneDependency,点击进入可以看到继承了 NarrowDependency,所以默认 dependency 就是 narrowdependency

如果 RDD 没有继承 getdepenency,返回新的 dependency,那么这个 RDD 就是窄依赖(onetoone


四、宽窄依赖判断依据总结

1.  如果分区间一对一,就是窄依赖

2.  如果分区是多对一,要看看是否有数据分发,有就是 shuffle

3.  最准确的判断方式是看源码

相关文章
|
5月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
63 0
|
5月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
131 0
|
6月前
|
分布式计算 Java Spark
图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理
图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理
35 0
|
2月前
|
存储 缓存 分布式计算
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
|
5月前
|
SQL 分布式计算 大数据
Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突
Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突
102 0
|
5月前
|
存储 分布式计算 大数据
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
71 0
|
5月前
|
分布式计算 资源调度 大数据
【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)
【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)
248 0
|
7月前
|
SQL 分布式计算 算法
【大数据处理框架】Spark大数据处理框架,包括其底层原理、架构、编程模型、生态圈
【大数据处理框架】Spark大数据处理框架,包括其底层原理、架构、编程模型、生态圈
245 0
|
4月前
|
机器学习/深度学习 SQL 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
161 0