spark论文阅读笔记(二)
来源:互联网 发布:php技术论坛 编辑:程序博客网 时间:2024/06/06 20:11
RDD中的宽依赖和窄依赖
在spark中,系统通过一个通用接口来抽象地表示每个RDD,这个接口的内容包括:一组分区(partition),指向父RDD的依赖关系,一个可以从父RDD得到该RDD的计算函数,分区策略,数据位置。这里详细讲解一下依赖关系:
依赖关系被分为两种:
1、
在这种依赖中,父RDD的一个分区最多只会被子RDD的一个分区使用,即父RDD的分区内数据是不可分割的,比如map操作,就是从一个父分区,直接映射到一个子分区。
2、
即父 RDD 中一个分区内的数据会被分割,发送给子 RDD 的所有分区,如reduceByKey操作,因为该操作是把父RDD分区的不同key映射到子RDD的不同分区,故是宽依赖
一般来说,窄依赖的故障恢复要更快,例如:fileRDD 经历了 map、reduce以及filter 三次转换操作,得到了最终的 RDD,其中,map、filter操作对应的依赖为窄依赖,reduce 操作对应的是宽依赖。
假设最终 RDD 第一块分区内的数据因为某些原因丢失了,由于 RDD 内的每一个分区都会记录其对应的父 RDD 分区的信息,因此沿着下图所示的依赖关系往回走,就能找到该分区数据最终来源于 fileRDD的所有分区,再沿着依赖关系往后计算路径中的每一个分区数据,即可得到丢失的分区数据。
同时也可以想象,如果一直是窄依赖,那么回复就不需要fileRDD的所有分区,而只需要其中一个,那么想必就会快上很多。
7月23日补充:
这里稍微更正一下之前的理解,之前认为窄依赖就是单纯的1:1关系,其实是有问题的,如下图
前3个图都是窄依赖(又称完全依赖,FullDependency),哪怕是一个N:N的关系,只要子RDD的分区(partition)的数据,来源于一个或多个完整的父RDD分区,那么就是窄依赖,反之,如果只来源于父RDD某个分区的1/2,那么就是宽依赖
- spark论文阅读笔记(二)
- 论文阅读笔记(二)
- spark论文阅读笔记(一)
- spark论文阅读笔记(三)
- YOLO9000论文阅读笔记(二)
- 论文阅读(二)
- Apache Spark源码走读之1 -- Spark论文阅读笔记
- Apache Spark源码走读之1 -- Spark论文阅读笔记
- (论文阅读笔记1)Collaborative Metric Learning(二)(WWW2017)
- 论文阅读笔记(二)细粒度图像分类
- 详细阅读Spark论文
- 论文阅读笔记(六)
- 论文阅读笔记(五)
- 论文阅读笔记(四)
- 论文阅读笔记(三)
- 论文阅读笔记(一)
- Spark源码阅读笔记之Broadcast(二)
- object tracking 论文阅读笔记(持续)
- 分块索引(查找)
- leetcode:atoi(含去除首空格与字…
- leetcode:最大容器问题
- spark说明手册阅读笔记
- spark论文阅读笔记(一)
- spark论文阅读笔记(二)
- spark论文阅读笔记(三)
- leetcode:字符排列组合
- Nginx基本配置(PHP)
- 用JS写的一个简单的导航栏
- leetcode:4sum以及快慢指针
- SparkInternal阅读笔记(一)
- linux杂项命令笔记(scp、tar、find…
- 深度学习与CNN、RNN(一)(反向传…