Spark RDD的宽依赖和窄依赖
系列文章目录
Spark RDD 的宽窄依赖关系
一、RDD的依赖关系?
在 Spark 中,RDD 分区的数据不支持修改,是只读的。如果想更新 RDD 分区中的数据,那么只 能对原有 RDD 进行转化操作,也就是在原来 RDD 基础上创建一个新的 RDD。 那么,在整个任务的运算过程中,RDD 的每次转换都会生成一个新的 RDD,因此 RDD 们之间会 产生前后依赖的关系。
在RDD的运算过程中,相当于对原始的RDD分区数据的整个运算进行了拆解,当运算中出现异常情况导致分区数据丢失时,Spark还可以通过依赖关系从上一个RDD中重新计算丢失的数据,而不是对最开始的RDD分区数据重新进行计算。
在RDD的依赖关系中,我们将上一个RDD称为父RDD,下一个RDD称为子RDD。
二、如何区分宽依赖和窄依赖?
RDD之间的依赖关系,分为宽依赖和窄依赖。
宽依赖:父(上游)RDD中每个分区的数据都可以被子(下游)RDD的多个分区使用(涉及到了shuffle)===> 一对多的 (具体指:RDD中每个分区的数据)
窄依赖:父(上游)RDD中每个分区的数据只能被子(下游)RDD的一个分区使用
**常见宽依赖算子:**join(非hash-partitioned)、groupByKey、partitionBy;
**常见的窄依赖的算子:**map、filter、union、join(hash-partitioned)、mapPartitions;
三、为什么要设计宽窄依赖?
在窄依赖中子 RDD 的每个分区数据的生成操作都是可以并行执行的,而 在宽依赖中需要所有父 RDD 的 Shuffle 结果完成后再被执行。
在 Spark 执行作业时,会按照 Stage 划分不同的 RDD,生成一个完整的最优执行计划,使每个 Stage 内的 RDD 都尽可能在各个节点上并行地被执行。 如下图,Stage3 包含 Stage1 和 Stage2,其中, Stage1 为窄依赖,Stage2 为宽依赖。
在 Spark 执行作业时,会按照 Stage 划分不同的 RDD,生成一个完整的最优执行计划,使每个 Stage 内的 RDD 都尽可能在各个节点上并行地被执行。
如下图,Stage3 包含 Stage1 和 Stage2,其中, Stage1 为窄依赖,Stage2 为宽依赖。
因此,划分宽窄依赖也是 Spark 优化执行计划的一个重要步骤,宽依赖是划分执行计划中 Stage 的 依据,对于宽依赖必须要等到上一个 Stage 计算完成之后才能计算下一个阶段。
总结
宽依赖和窄依赖:看看两个RDD的分区之间的关系是不是一对一的关系,一对一就是窄依赖,一对多就是宽依赖。
Spark RDD的宽依赖和窄依赖相关推荐
- 宽依赖和窄依赖_Spark RDD的宽依赖和窄依赖
1.宽依赖和窄依赖说明 由于RDD是粗粒度的操作数据集,每个Transformation操作都会生成一个新的RDD,所以RDD之间就会形成类似流水线的前后依赖关系:RDD和它依赖的父RDD(s)的关系 ...
- 宽依赖和窄依赖_Spark RDD中的依赖关系:宽依赖和窄依赖narrow/widedependency
前言:前面我们讲过,RDD的转化Transformation操作是一个RDD生成另一个新的RDD的过程,那么新的RDD必然依赖原来的RDD.那么RDD的依赖分为几种,分别是什么含义呢?为什么要分类呢? ...
- Spark 的宽依赖和窄依赖
针对不同函数,Spark 分为宽依赖和窄依赖, 窄依赖是一个父RDD 分区对应一个子RDD 分区,或者说是多个父RDD分区对应一个子RDD分区,比如map,flapmap,filter 宽依赖是一个父 ...
- 宽依赖和窄依赖_Spark术语解释及宽窄依赖执行原理,代码分析
1. 术语解释 2. 窄依赖和宽依赖: RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖. 窄依赖: 父RDD和子RDD partition之间的关系是一对一的.或者父RDD一个partit ...
- 宽依赖和窄依赖_spark的宽依赖窄依赖
1RDD的依赖关系及容错 1.1RDD的依赖关系 RDD的依赖关系分为两种:窄依赖(Narrow Dependencies)与宽依赖(Wide Dependencies,源码中称为ShuffleDep ...
- 宽依赖和窄依赖_Spark宽依赖和窄依赖深度剖析
宽依赖和窄依赖深度剖析.png RDD依赖关系与stage划分 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的依赖关系. 1. ...
- 宽依赖和窄依赖_Spark --【宽依赖和窄依赖】
1.前言 <上一节Spark DAG概述>Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage, 暴力的理解就是stage的划分是按照有没有涉及到s ...
- 宽依赖和窄依赖深度剖析
宽依赖和窄依赖深度剖析 宽依赖和窄依赖的概念: 窄依赖:一个RDD,对其父RDD只有简单的一对一的依赖关系.即父RDD和子RDD的partition的对应关系是一对一的 宽依赖:英文名称shuffle ...
- 深入解读 Spark 宽依赖和窄依赖(ShuffleDependency NarrowDependency)
目前,网上有关宽窄依赖的博客大多都使用下面这张图作为讲解: 实际上,这幅图所表达的内容并不完善.其中,窄依赖的内容表达的不够全面,而宽依赖的部分容易让人产生误解.本文,我将用新的绘图带大家搞清楚究竟什 ...
最新文章
- 电脑如何恢复声音_电脑文件剪切丢失如何恢复?99%数据都能恢复
- 404未找到是什么意思_为什么老遇上404 not found?你懂的
- 跟踪Makefile输出调试信息
- php 流(Stream)
- 都说90后不好管?聊聊跳槽这件事儿
- 转载一个程序员的游戏之路
- 51NOD 1244 莫比乌斯函数之和
- 64位 centos 服务器 编译安装 gcc-4.6.2 和 codeviz
- 遭遇爆炸式匿名*** 瑞星称有人下黑手
- STM32F103红外遥控
- SimpleFOC调参3-PID参数整定攻略
- c语言源程序自动评判系统,C语言源程序的自动评判系统.pdf
- IOS 逆向开发(一)密码学 非对称加密RSA
- Word 边框刷使用方法
- Web 3.0 :它是互联网的未来吗?
- 问卷星问卷数据怎么快速导入SPSSAU?
- [Matlab]脚本实现Excel单元格内容首尾空格删除
- Android 客户端Socket 与 Java服务端ServerSocket
- 毫米波/激光/超声波雷达的区别
- 12.16 Day 1 - 分布式系统架构的冰与火