RDD:英文全称Resilient Distributed Dataset,叫做弹性分布式数据集,代表一个不可变、可分区、里面的元素可并行计算的分布式的抽象的数据集合。
-
Resilient弹性:RDD的数据可以存储在内存或者磁盘当中,RDD的数据可以分区
-
Distributed分布式:RDD的数据可以分布式存储,可以进行并行计算
-
Dataset数据集:一个用于存放数据的集合
一, RDD的5大特性
源码如下
1. 第一个:A list of partitions :
(必须的)RDD是由一系列分区组成的
2、 第二个:A function for computing each split :
(必须的)对RDD做计算,相当于对RDD的每个分区做计算
3、第三个:A list of dependencies on other RDDs:
(必须的)RDD之间存在着依赖关系(宽依赖和窄依赖)
4、 第四个:Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned):
(可选的)对于KV类型的RDD,默认操作的是k,当然我们可以进行自定义分区方案
5、Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file):
(可选的)移动数据不如移动计算,让计算程序离数据越近越好
二,RDD特点
特点1:分区-RDD逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据。
特点2:只读-RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。
特点3:依赖-RDDs之间维护着这种血缘关系,也称之为依赖
特点4:缓存-如果在应用程序中多次使用同一个RDD,可以将该RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据
特点5:checkpoint-随着迭代的进行,RDDs之间的血缘关系会越来越长,一旦在后续迭代过程中出错,则需要通过非常长的血缘关系去重建,势必影响性能。为此,RDD支持checkpoint将数据保存到持久化的存储中,这样就可以切断之前的血缘关系