Spark 原理_逻辑图_窄依赖_分析 | 学习笔记

简介: 快速学习 Spark 原理_逻辑图_窄依赖_分析

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

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


Spark 原理_逻辑图_窄依赖_分析


内容简介

一、明确步骤

二、分析笛卡尔积案例

三、总结

 

一、明确步骤

1.Spark 原理中很重要一个部分是逻辑执行图,逻辑执行图就是 RDD 的生成和 RDD 之间的关系,RDD 之间的关系,大致分为两种:窄依赖和宽依赖。

2.窄依赖

1)求笛卡尔积

上节所编写的案例

(2)分析案例是否是窄依赖

//这样就需要一个标准来判断宽窄依赖

3.区分宽窄依赖的原因

想要看看 RDD 的分区是否能放在同一个流水线上执行,能否放在一个流水线上执行?取决于这两个 RDD 之间是否是 Shuffle 关系,有 Shuffle 是窄依赖,反之就是宽依赖

//如果有 shuffle 关系,就不能放在一个流水线上执行

 

二、分析笛卡尔积案例

1.案例分析

案例如下:

Val sc = ....

Val rddA = sc.parallelize(Seq(1,2,3,))

Val rddB = sc.parallelize(Seq(a,b))

/**

*运行结果:(1,a,(1,b), (2,a), (2,b),3,a,(3,b)

*/

rddA.cartesian(rddB).collect().foreach(printin(_))    # rddA rddB 生成的为 rddC

其实创建笛卡尔积就是创建两个分区、rddaA rddB,一个存放123,一个存放 ab

求笛卡尔积就是将 rddA 中的每个元素和 rddB 中的每个元素进行整合连接

分辨 rddA rddB rddC 之间的关系

上述代码的 cartesian 是求得两个集合的笛卡尔积

上述代码的运行结果是 rddA 中每个元素和 rddB 中的所有元素结合,最终的结果数量是两个 RDD 数量之和

RddC 有两个父 RDD,分别为 rddA rddB

对于 cartesian 来说,依赖关系如下:

image.png

假设 rddA rddB 中的每个分区中只有一条数据,rddA p1p2p3 中的内容分别是123rddB p1p2 对应的内容是:ab

rddC 中从 p1~p6 中的数据分别为 1a,1b,2a,2b,3a,3b

中间关系是否是 shuffle

RddC p1 依赖了两个分区,rddA p1 rddB p1

如何判断宽窄依赖/如何判断是否含有 shuffle

如果含有 shuffle ,则分区中的数据还要进行拆分,例如 p1 分区,其中的数据将要进行拆分,并不会全部转入 rddC,其中 rdd p1 中的数据是没有再分的,没有分区,shuffle 会对数据进行分区,所以这里属于窄依赖。

//第一个分区(rddA)会发个第一个结果分区(rddC),第二个分区会发个第二个结果分区,这样被称为 shuffle

这里没有明确的说一定是款窄依赖,是否含有 shuffle,所以我们要从源码中进行研究

2.举例

进入编码

点击 cartesian 算子

image.png

进入后,会发现生成的是 cartesianRDD

继续点击 cartesianRDD,可以看到 getdependency 分区中,返回的都是 narrowdependency//叫做窄依赖 ,点进

# rdd 当中有三个必要属性:分区列表、依赖关系、计算函数

可以进入到一个 dependency 的文件中,shuffledependency 代表宽依赖

image.png

所以只需要进入 cortesianRDD 中查看返回的 dependency 类型就可以判断宽窄依赖


三、总结

所有的分区之间是拷贝关系,并不是 shuffle 关系

// rddA p1 将数据放入 rddC p1 中,称为拷贝关系并不准确,方便理解,这里这样称呼

RddA P1 并没有被拆开分发给 rddC 的多个分区,所以它们之间并不是 shuffle 关系

1.Rdd 中的每个分区并不是依赖多个父 RDD 中的多个分区

2.RddC 中每个分区的数量来自一个父 RDD 分区中的所有数据,是一个 fulldependence,所以数据可以直接从父 RDD 流动到子 RDD

3.不存在一个父 RDD 中一部分数据分发过去,另一部分分发给其他的 rdd

相关文章
|
4月前
|
机器学习/深度学习 分布式计算 算法
Spark快速大数据分析PDF下载读书分享推荐
《Spark快速大数据分析》适合初学者,聚焦Spark实用技巧,同时深入核心概念。作者团队来自Databricks,书中详述Spark 3.0新特性,结合机器学习展示大数据分析。Spark是大数据分析的首选工具,本书助你驾驭这一利器。[PDF下载链接][1]。 ![Spark Book Cover][2] [1]: https://zhangfeidezhu.com/?p=345 [2]: https://i-blog.csdnimg.cn/direct/6b851489ad1944548602766ea9d62136.png#pic_center
172 1
Spark快速大数据分析PDF下载读书分享推荐
|
21天前
|
SQL 分布式计算 Serverless
EMR Serverless Spark:一站式全托管湖仓分析利器
本文根据2024云栖大会阿里云 EMR 团队负责人李钰(绝顶) 演讲实录整理而成
110 2
|
1月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
42 4
|
1月前
|
分布式计算 Java 大数据
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
38 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
|
1月前
|
设计模式 数据采集 分布式计算
企业spark案例 —出租车轨迹分析
企业spark案例 —出租车轨迹分析
62 0
|
1月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
42 0
|
1月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
76 0
|
4月前
|
弹性计算 分布式计算 Serverless
全托管一站式大规模数据处理和分析Serverless平台 | EMR Serverless Spark 评测
【7月更文挑战第6天】全托管一站式大规模数据处理和分析Serverless平台 | EMR Serverless Spark 评测
23706 42
|
5月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
39 0
|
5月前
|
分布式计算 定位技术 Scala
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
110 0