1. 什么是 RDD
源码:https://github.com/apache/spark
A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel.
RDD
是一个弹性的分布式数据集,是 spark
的基本抽象,是不可变的,且由多个 partition
(可理解为分区)构成(可能分布在多条机器上,可以存在内存或磁盘中),可以进行并行操作。
名词解释
- 弹性:分布式计算时可容错,即一个节点挂了另一个会起来
- 不可变:一旦产生就不能被改变
2. RDD 特性
单机存储/计算 ====> 分布式(集群)/计算,分布式:考虑的是数据的切割、计算、存储
- 数据存储:切割
HDFS
的Block
- 数据计算,切割(分布式并行计算)
MapReduce/Spark
- 存储+计算:
HDFS/S3+MapReduce/Spark
RDD 特性
A list of partitions
:RDD
由很多partitions
构成,在spark
中,计算时有多少partition
就对应有多少个task
来执行A function for computing each split
:对RDD
做计算,相当于对RDD
的每个split
或partition
做计算A list of dependencies on other RDDS
:RDD
之间有依赖关系、血缘关系,可溯源Optionally, a Partitions for key-value RDDs (e.g. to say that the RDD is hash-partitions)
:若RDD
里面存的数据是key-value
形式,则可以传递一个自定义的Partition
进行重新分区,如可以按key
的hash
值重新分区Optionally,a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
:最优的位置去计算,即数据的本地性(移动数据不如移动计算,移动数据代价太大)