RDD(Resilient Distributed Dataset)是一个弹性的分布式的数据集,是spark的基本抽象,RDD是不可变的,并且它由多个partition构成(可能分布在多台机器上,可以存memory上,也可以存disk里等等),可以进行并行操作
- 分布式:由多个partition构成,可能分布在多台机器上,可以存memory上,也可以存disk里等等
- 弹性:分布式计算可容错
- 分片的弹性:根据需要重新分片
- 内存的弹性:内存与磁盘的自动切换
- 计算的弹性:计算出错重试机制
- 容错的弹性:数据丢失可以自动恢复
- 不可变:一旦创建就不可改变。例如,RDD A经过转换操作变成RDD B,这两个RDD具有血缘关系,但是是两个不同的RDD。
RDD的5大特点
1. A list of partitions
RDD由一到多个partition构成,有多少个partition就对应有多少个task。
2. A function for computing each split
对RDD做计算,相当于对RDD的每个split或partition做计算。
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)
如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,比如可以按key的hash值分区。
5. Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
每个split一般有多个副本,计算时优先使用本地的副本进行计算,减少数据的IO和网络传输,提高性能。