spark中RDD 的依赖关系

spark中RDD 的依赖关系
1、RDD 的依赖
RDD 和它依赖的父RDD 的关系有两种不同的类型, 即窄依赖( narrowdependency)和宽依赖(wide dependency)。
spark中RDD 的依赖关系_第1张图片
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 的依赖关系_第2张图片
通过查看源码发现cache 最终也是调用了persist 方法,默认的存储级别都是仅在内存存储一份, Spark 的存储级别还有好多种, 存储级别在objectStorageLevel 中定义的。
spark中RDD 的依赖关系_第3张图片
缓存有可能丢失,或者存储于内存的数据由于内存不足而被删除,RDD 的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD 的一系列转换,丢失的数据会被重算,由于RDD 的各个Partition 是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。

你可能感兴趣的:(spark,RDD,大数据,宽依赖和窄依赖,RDD缓存)