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

相关文章
|
7月前
|
移动开发 分布式计算 Spark
Spark的几种去重的原理分析
Spark的几种去重的原理分析
136 0
|
2月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
44 4
|
2月前
|
分布式计算 Java 大数据
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
39 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
|
2月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
48 0
|
2月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
83 0
|
6月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
42 0
|
7月前
|
SQL 存储 分布式计算
spark执行sql的原理是什么
spark执行sql的原理是什么
129 1
|
7月前
|
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`。
109 0
|
28天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
82 2
ClickHouse与大数据生态集成:Spark & Flink 实战

热门文章

最新文章