Spark分析之Dependency
来源:互联网 发布:端口测试失败 编辑:程序博客网 时间:2024/06/13 13:18
在Spark中,每一个RDD是对于数据集在某一状态下的表现形式,比如说:map、filter、group by等都算一次操作,这个状态有可能是从前一状态转换而来的;
因此换句话说一个RDD可能与之前的RDD(s)有依赖关系;RDD之间存在依赖关系;
根据依赖关系的不同,可以将RDD分成两种不同的类型:宽依赖和窄依赖。
窄依赖:一个父RDD的partition至多被子RDD的某个partition使用一次;
宽依赖:一个父RDD的partition会被子RDD的partition使用多次,需要shuffle操作;
图中方框描述:外面的大方框是一个RDD,里面的小方块是RDD中的partition,多个partition组成一个RDD
窄依赖
在某个节点上可以一次性全部计算完所有的父partition(pipeline流水式的计算方式):
a.map().filter().reduceByKey() 这样多步操作一次性计算完毕,而不需要第一步执行完后保存起来,第二步再去读取再计算再存储。。。。。。
窄依赖可以在单节点上完成运算,非常高效。
容错:某个partition挂了,快速将丢失的partition并行计算出来。
容错和计算速度都比宽依赖强。
OneToOneDependency:一对一的依赖,一父一子,最典型的是map/filter。
RangeDependency:一定范围的RDD直接对应,最典型的是Union。
parent RDD的某个分区的partitions对应到child RDD中某个区间的partitions;
union:多个parent RDD合并到一个chind RDD,故每个parent RDD都对应到child RDD中的一个区间;
注意:union不会把多个partition合并成一个partition,而是简单的把多个RDD的partitions放到一个RDD中,partition不会发生变化。
宽依赖
定义:一个父RDD的partition会被子RDD的partition使用多次;只能前面的算好后才能进行后续的计算;只有等到父partition的所有数据都传输到各个节点后才能计算(经典的mapreduce场景)
容错:某个partition挂了,要计算前面所有的父partition,代价很大。
spark是把map部分的数据计算完成后物化到map端的磁盘上,挂了之后直接从磁盘中读取即可。
class ShuffleDependency[K, V]( @transient rdd: RDD[_ <: Product2[K, V]], val partitioner: Partitioner, val serializerClass: String = null) extends Dependency(rdd.asInstanceOf[RDD[Product2[K, V]]]) { val shuffleId: Int = rdd.context.newShuffleId()}
首先:需要基于PairRDD,因为一般需要依据key进行shuffle,所以数据结构往往是key-value;
其次:由于需要shuffle,所以就需要给出partitioner;
然后:shuffle不像map可以在local运行,往往需要网络传输或存储,所以需要serializerClass;
最后:每个shuffle需要分配一个全局的id,context.newShuffleId()的实现就是把全局id累加;
- Spark分析之Dependency
- Spark RDD之Dependency
- Spark-Dependency
- Spark源码解读之RDD依赖Dependency
- Spark视频之Scala中Dependency Injection实战详解
- Spark-Dependency/Aggregator
- spark core 2.0 Dependency
- Spark分析之DAGScheduler
- Spark分析之TaskScheduler
- Spark分析之BlockManager
- Spark分析之Master
- Spark分析之Worker
- Spark分析之MemoryStore
- Visual Studio 2010分析工具之Dependency Graph【z】
- spark源码分析之shuffleFetcher
- Spark源码分析之Worker
- Spark源码分析之Worker
- Spark源码分析之Worker
- Docker踩坑
- Dubbo中编码和解码的解析
- Faster RCNN roi_pooling_layer.cpp roi_pooling_layer.cu
- 团体程序设计天梯赛-练习集 L2-002. 链表去重 解题报告
- 用div来布局,css来显示
- Spark分析之Dependency
- 黑心企业武汉美斯坦福强收学生数百万实训费。
- 两个Activity跳转到同一个Activity并传值
- 文件属性与库
- 【Linux】yum与apt-get的区别
- 非root用户离线安装python的第三方库
- css-响应Web设计1
- MySQL增删改查以及表的创建与删除
- frameset标签设计页面