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.  最准确的判断方式是看源码

目录
打赏
0
0
0
0
127
分享
相关文章
【赵渝强老师】Spark RDD的依赖关系和任务阶段
Spark RDD之间的依赖关系分为窄依赖和宽依赖。窄依赖指父RDD的每个分区最多被一个子RDD分区使用,如map、filter操作;宽依赖则指父RDD的每个分区被多个子RDD分区使用,如分组和某些join操作。窄依赖任务可在同一阶段完成,而宽依赖因Shuffle的存在需划分不同阶段执行。借助Spark Web Console可查看任务的DAG图及阶段划分。
212 15
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
112 4
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
101 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
219 0
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
167 0
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`。
231 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问