系列文章目录

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的宽依赖和窄依赖相关推荐

  1. 宽依赖和窄依赖_Spark RDD的宽依赖和窄依赖

    1.宽依赖和窄依赖说明 由于RDD是粗粒度的操作数据集,每个Transformation操作都会生成一个新的RDD,所以RDD之间就会形成类似流水线的前后依赖关系:RDD和它依赖的父RDD(s)的关系 ...

  2. 宽依赖和窄依赖_Spark RDD中的依赖关系:宽依赖和窄依赖narrow/widedependency

    前言:前面我们讲过,RDD的转化Transformation操作是一个RDD生成另一个新的RDD的过程,那么新的RDD必然依赖原来的RDD.那么RDD的依赖分为几种,分别是什么含义呢?为什么要分类呢? ...

  3. Spark 的宽依赖和窄依赖

    针对不同函数,Spark 分为宽依赖和窄依赖, 窄依赖是一个父RDD 分区对应一个子RDD 分区,或者说是多个父RDD分区对应一个子RDD分区,比如map,flapmap,filter 宽依赖是一个父 ...

  4. 宽依赖和窄依赖_Spark术语解释及宽窄依赖执行原理,代码分析

    1. 术语解释 2. 窄依赖和宽依赖: RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖. 窄依赖: 父RDD和子RDD partition之间的关系是一对一的.或者父RDD一个partit ...

  5. 宽依赖和窄依赖_spark的宽依赖窄依赖

    1RDD的依赖关系及容错 1.1RDD的依赖关系 RDD的依赖关系分为两种:窄依赖(Narrow Dependencies)与宽依赖(Wide Dependencies,源码中称为ShuffleDep ...

  6. 宽依赖和窄依赖_Spark宽依赖和窄依赖深度剖析

    宽依赖和窄依赖深度剖析.png RDD依赖关系与stage划分 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的依赖关系. 1. ...

  7. 宽依赖和窄依赖_Spark --【宽依赖和窄依赖】

    1.前言 <上一节Spark DAG概述>Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage, 暴力的理解就是stage的划分是按照有没有涉及到s ...

  8. 宽依赖和窄依赖深度剖析

    宽依赖和窄依赖深度剖析 宽依赖和窄依赖的概念: 窄依赖:一个RDD,对其父RDD只有简单的一对一的依赖关系.即父RDD和子RDD的partition的对应关系是一对一的 宽依赖:英文名称shuffle ...

  9. 深入解读 Spark 宽依赖和窄依赖(ShuffleDependency NarrowDependency)

    目前,网上有关宽窄依赖的博客大多都使用下面这张图作为讲解: 实际上,这幅图所表达的内容并不完善.其中,窄依赖的内容表达的不够全面,而宽依赖的部分容易让人产生误解.本文,我将用新的绘图带大家搞清楚究竟什 ...

最新文章

  1. 电脑如何恢复声音_电脑文件剪切丢失如何恢复?99%数据都能恢复
  2. 404未找到是什么意思_为什么老遇上404 not found?你懂的
  3. 跟踪Makefile输出调试信息
  4. php 流(Stream)
  5. 都说90后不好管?聊聊跳槽这件事儿
  6. 转载一个程序员的游戏之路
  7. 51NOD 1244 莫比乌斯函数之和
  8. 64位 centos 服务器 编译安装 gcc-4.6.2 和 codeviz
  9. 遭遇爆炸式匿名*** 瑞星称有人下黑手
  10. STM32F103红外遥控
  11. SimpleFOC调参3-PID参数整定攻略
  12. c语言源程序自动评判系统,C语言源程序的自动评判系统.pdf
  13. IOS 逆向开发(一)密码学 非对称加密RSA
  14. Word 边框刷使用方法
  15. Web 3.0 :它是互联网的未来吗?
  16. 问卷星问卷数据怎么快速导入SPSSAU?
  17. [Matlab]脚本实现Excel单元格内容首尾空格删除
  18. Android 客户端Socket 与 Java服务端ServerSocket
  19. 毫米波/激光/超声波雷达的区别
  20. 12.16 Day 1 - 分布式系统架构的冰与火

热门文章

  1. SSR 配置postcss 自动将px转化为rem
  2. 零基础超简单的Docker入门教程 So Easy
  3. 一道导数与不等式结合的题目
  4. HSE\HEI\PLL\LSE\LSI
  5. ZufeInfo 2018级软件工程专业毕业设计,开题报告常见格式问题解答
  6. jQuery框架介绍-简化js
  7. 电子签约B2B供应链,又一个行业发展新动态!
  8. 计算机网络 华东理工大学 第3章测试
  9. 图解PMP项目管理马斯洛需求层次理论在公司管理中的应用!
  10. 工业RFID读写器|读卡器在装配线自动化改造升级中的应用与优势