Spark RDD 宽依赖&窄依赖

  • 1.窄依赖
  • 2.宽依赖:
  • 3.阶段的划分
  • 4.宽依赖和窄依赖的作用:

1.窄依赖

每一个父RDD的Partition最多被子RDD的一个Partition使用 (一对一的关系)
常见算子:map flatmap filter union sample 等等

2.宽依赖:

指的是多个子RDD的Partition会依赖同一个父RDD的Partition (一对多的关系)
常见算子:groupByKey reduceByKey sortByKey join 等等


对于窄依赖的 RDD,可以以流水线的方式计算所有父分区,不会造成网络之间的数据混合。对于宽依赖的 RDD,则通常伴随着 Shuffle 操作,即首先需要计算好所有父分区数据,然后在节点之间进行 Shuffle。因此,在进行数据恢复时,窄依赖只需要根据父 RDD 分区重新计算丢失的分区即可,而且可以并行地在不同节点进行重新计算。而对于宽依赖而言,单个节点失效通常意味着重新计算过程会涉及多个父 RDD 分区,开销较大。此外,Spark 还提供了数据检查点和记录日志,用于持久化中间 RDD,从而使得在进行失败恢复时不需要追溯到最开始的阶段。在进行故障恢复时,Spark 会对数据检查点开销和重新计算 RDD 分区的开销进行比较,从而自动选择最优的恢复策略。

3.阶段的划分

Spark 通过分析各个 RDD 的依赖关系生成了 DAG ,再通过分析各个 RDD 中的分区之间的依赖关系来决定如何划分阶段,具体划分方法是:在 DAG 中进行反向解析,遇到宽依赖就断开,遇到窄依赖就把当前的 RDD 加入到当前的阶段中;将窄依赖尽量划分在同一个阶段中,可以实现流水线计算。例如在下图中,首先根据数据的读取、转化和行为等操作生成 DAG。然后在执行行为操作时,反向解析 DAG,由于从 A 到 B 的转换和从 B、F 到 G 的转换都属于宽依赖,则需要从在宽依赖处进行断开,从而划分为三个阶段。把一个 DAG 图划分成多个 “阶段” 以后,每个阶段都代表了一组关联的、相互之间没有 Shuffle 依赖关系的任务组成的任务集合。每个任务集合会被提交给任务调度器(TaskScheduler)进行处理,由任务调度器将任务分发给 Executor 运行。

DAG: 表示整个Spark的执行流程
spark中划分stage通过宽依赖进行的,遇见宽依赖就切分,每个stage内部能多地包含一组具有窄依赖关系的转换,并将它们流水线并行化

4.宽依赖和窄依赖的作用:

1、stage划分
2、容错(针对复杂业务逻辑,当执行到宽依赖的时候,进行适当的cache,担心任务异常结束,数据重跑)
3、代码优化

Spark RDD 宽依赖窄依赖相关推荐

  1. Spark宽依赖 窄依赖 Job Stage Executor Task 总结

    文章授权自: http://www.6aiq.com/article/1547041236424 宽依赖与窄依赖 窄依赖(narrow dependency)和宽依赖(wide dependency, ...

  2. spark中stage的划分与宽依赖/窄依赖(转载+自己理解/整理)

    [1]宽依赖和窄依赖,这是Spark计算引擎划分Stage的根源所在,遇到宽依赖,则划分为多个stage,针对每个Stage,提交一个TaskSet: 上图:一张网上的图: (个人笔记,rdd中有多个 ...

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

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

  4. RDD的依赖关系、窄依赖、宽依赖、RDD的缓存、RDD缓存方式、DAG的生成、RDD容错机制之Checkpoint

    1.RDD的依赖关系 RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency). 1.1.窄依赖 窄依赖指的是每一 ...

  5. Spark RDD 特征及其依赖

    1 RDD特征 分区(partition) 有一个数据分片列表,能够将数据进行切分,切分后的数据能够进行并行计算,是数据集的原子组成部分 函数 compute 计算每个分片,得出一个可遍历的结果,用于 ...

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

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

  7. Spark—RDD依赖血缘关系

    文章目录 Spark-RDD依赖&血缘关系 1.RDD 血缘关系 2.RDD 依赖关系 3.窄依赖 4.宽依赖 5.宽窄依赖示意图 6.RDD 阶段划分 7.RDD 任务划分 Spark-RD ...

  8. 学习笔记Spark(三)—— Spark架构及原理(spark架构、spark RDD)

    一.Spark架构 1.1.基本组件 Cluster Manager 在standalone模式中即为Master主节点,控制整个集群,监控worker.在YARN模式中为资源管理器. Worker ...

  9. 第二章 Spark RDD以及编程接口

    第二章 Spark RDD以及编程接口 目录 Spark程序"Hello World" Spark RDD 创建操作 转换操作 控制操作 行动操作 注:学习<Spark大数据 ...

最新文章

  1. 一款优秀的JavaScript框架—AngularJS
  2. [转]php-mobile-detect
  3. 深度学习已成强弩之末?Bengio等大牛NeurlPS2019上支招
  4. 检验两组数据是否显著差异_SPSS非参数两个相关样本检验
  5. 为什么Map桶中个数超过8才转为红黑树
  6. mysql日期格式化季度_Mysql按周,按月,按日,按小时分组统计数据
  7. tbc服务器状态,魔兽怀旧服:TBC上线近俩月,玩家心态改变,开始涌入60级服务器...
  8. 不相交集的求并算法(按集合大小求并+按高度求并)
  9. 前端学习(3104):react-hello-虚拟dom的两种创建方式
  10. python去除图像光照不均匀_低光照环境下图像增强相关
  11. 命令行给php脚本传参,如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?...
  12. yum 安装oraclejdk_kubernetes-16:制作oraclejdk镜像
  13. python重命名文件夹下所有文件_Python3.4.3重命名当前文件夹下的文件
  14. OpenAI 将 k8s 扩展至 7500 个节点以支持机器学习
  15. ai png转矢量图_Boxy SVG for Mac(矢量图编辑器)
  16. python3视频教程哪个好_python3入门视频教程
  17. 必要的先决条件安装失败_先决条件
  18. 玩转树莓派之ZigBee网关
  19. 2021 ICPC Gran Premio de Mexico 2da Fecha(C,D,G,I)
  20. 2021年中国互联网!知识付费行业发展报告!

热门文章

  1. SpringBoot高级篇JdbcTemplate之数据查询上篇
  2. 学完Java后可从事的十大领域!
  3. Vue中路由管理器Vue Router使用介绍(三)
  4. java 中PriorityQueue优先级队列使用方法
  5. 玩转Linux进程控制命令
  6. 一个数组去重的简单实现
  7. 基于golang的数据结构源码说明
  8. java 构造块_java中构造方法、普通块、静态代码块、构造块的执行顺序
  9. 嵌入式linux ntpd命令,嵌入式Linux网络编程之:实验内容——NTP协议实现
  10. easyui 渲染问题(转)