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月前
|
移动开发 分布式计算 Spark
Spark的几种去重的原理分析
Spark的几种去重的原理分析
101 0
|
13天前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
37 4
|
13天前
|
分布式计算 Java 大数据
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
28 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
|
13天前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
30 0
|
13天前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
58 0
|
4月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
35 0
|
5月前
|
SQL 存储 分布式计算
spark执行sql的原理是什么
spark执行sql的原理是什么
102 1
|
5月前
|
SQL 分布式计算 Java
IDEA 打包 Spark 项目 POM 文件依赖
这是一个 Maven POM 示例,用于构建一个使用 Spark 与 Hive 的项目,目标是将数据从 Hive 导入 ClickHouse。POM 文件设置了 Scala 和 Spark 的依赖,包括 `spark-core_2.12`, `spark-sql_2.12`, 和 `spark-hive_2.12`。`maven-assembly-plugin` 插件用于打包,生成包含依赖的和不含依赖的两种 JAR 包。`scope` 说明了依赖的使用范围,如 `compile`(默认),`provided`,`runtime`,`test` 和 `system`。
|
13天前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
36 0
|
13天前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
29 0