Spark三大核心数据结构——RDD的概念、血缘和持久化

Spark中三大核心数据结构:

RDD、

广播变量(分布式只读变量)、

累加器(分布式只写变量)、

1. RDD的概念和特点:

RDD,全称Resilient Distributed Dataset,弹性分布式数据集,作为Spark中最基础的数据抽象,类似Java中对象的概念;

它代表一个不可变(只读)、可分区、里面的元素可并行计算的集合,List、Set、Map都是RDD的常见形式。

特点:只读、分区、血缘、缓存、checkpoint

2. RDD的血缘关系(宽窄依赖)

RDD是只读的分区的数据集,对RDD进行改动只能通过RDD的转换操作来实现,多个互相转换的RDDs之间存在血缘关系,也即RDD之间的依赖,分为Narrow Dependencies(一个父RDD对应一个子RDD)和Wide Dependencies(一个父RDD对应多个子RDD);

RDD的执行是按照血缘关系进行延时计算,血缘关系可以天然的实现数据的容错,如果数据迭代出错,可以通过血缘关系进行回溯重建;并且如果血缘关系过长,也可以通过持久化RDD来切断血缘;

3. RDD支持缓存Cache和CheckPoint这两种持久化方式:

(1)缓存Cache一般适用于应用程序多次需要使用同一个RDD,eg:保存到HDFS中(saveAsHadoopFile),缓存的RDD只有在第一次计算时会根据血缘关系得到分区数据,后续用到该RDD直接从缓存中取得数据而不再依据血缘关系计算,这样的好处是加速了后期的RDD重用;

因为Cache本身只是MemoryOnly,可能会随着内存释放,这样释放后数据会丢失,不安全;所以Cache并不会切断RDDs的血缘关系,如果Cache丢失还可以通过血缘关系来回溯;

(2)checkpoint是将RDD数据保存到持久化存储(eg:HDFS的节点中)中,并通过创建备份保证数据的安全性,这样就可以切断RDD之间的血缘关系,checkpoint后的RDD可以直接从checkpoint拿到数据而并不需要知道其父RDDs,checkpoint是一种常用的RDD缓存手段,相比Cache更加安全。

猜你喜欢

转载自blog.csdn.net/wx1528159409/article/details/87106727