spark中RDD 的依赖关系

spark中RDD 的依赖关系
1、RDD 的依赖
RDD 和它依赖的父RDD 的关系有两种不同的类型, 即窄依赖( narrowdependency)和宽依赖(wide dependency)。
《spark中RDD 的依赖关系》
2、窄依赖
窄依赖指的是每一个父RDD 的Partition 最多被子RDD 的一个Partition 使用
总结:窄依赖我们形象的比喻为独生子女
3、宽依赖
宽依赖指的是多个子RDD 的Partition 会依赖同一个父RDD 的Partition
总结:宽依赖我们形象的比喻为超生
4、Lineage(血统)
RDD 只支持粗粒度转换,即只记录单个块上执行的单个操作。将创建RDD的一系列Lineage(即血统)记录下来,以便恢复丢失的分区。RDD 的Lineage会记录RDD 的元数据信息和转换行为,当该RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。
5、RDD 的缓存
Spark 速度非常快的原因之一,就是在不同操作中可以在内存中持久化或者缓存数据集。当持久化某个RDD 后,每一个节点都将把计算分区结果保存在内存中,对此RDD 或衍生出的RDD 进行的其他动作中重用。这使得后续的动作变得更加迅速。RDD 相关的持久化和缓存,是Spark 最重要的特征之一。可以说,缓存是Spark 构建迭代式算法和快速交互式查询的关键。
RDD 缓存方式
RDD 通过persist 方法或cache 方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的action 时,该RDD 将会被缓存在计算节点的内存中,并供后面重用。
《spark中RDD 的依赖关系》
通过查看源码发现cache 最终也是调用了persist 方法,默认的存储级别都是仅在内存存储一份, Spark 的存储级别还有好多种, 存储级别在objectStorageLevel 中定义的。
《spark中RDD 的依赖关系》
缓存有可能丢失,或者存储于内存的数据由于内存不足而被删除,RDD 的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD 的一系列转换,丢失的数据会被重算,由于RDD 的各个Partition 是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。

    原文作者:此木Y
    原文地址: https://blog.csdn.net/weixin_43909382/article/details/90384193
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞