SparkRDD的五大特性

SparkRDD的五大特性

  1. 一组分片(Partition)/一个分区(Partition)列表,即数据集的基本组成单位。(A list of partitions )
    对于RDD 来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD 时指定RDD 的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。

  2. 一个函数会被作用在每一个分区。(A function for computing each split )
    Spark 中RDD 的计算是以分片为单位的,每个RDD都会实现compute 函数以达到这个目的。ompute 函数会对迭代器进行复合,不需要保存每次计算的结果。

  3. RDD 之间的一系列依赖关系。依赖关系又分为宽依赖(有shuffle)和窄依赖(无shuffle)。(A list of dependencies on other RDDs )
    RDD 的每次转换都会生成一个新的RDD,所以RDD 之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark 可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD 的所有分区进行重新计算。(Spark的容错机制)

  4. 对于KV类型的RDD会有一个Partitioner,即RDD的分区函数(Optionally, a Partitioner for key-value RDDs)
    当前Spark 中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于于key-value 的RDD , 才会有Partitioner, 非key-value 的RDD 的Parititioner 的值是None。Partitioner 函数不但决定了RDD 本身的分片数量, 也决定了parent RDD Shuffle 输出时的分片数量。

  5. 一个列表, 存储存取每个Partition 的优先位置( preferred location)。
    (Optionally, a list of preferred locations to compute each split on )
    对于一个HDFS 文件来说,这个列表保存的就是每个Partition 所在的块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能选择那些存有数据的worker节点来进行任务计算。

RDD 是一个应用层面的逻辑概念。一个RDD 多个分片。RDD 就是一个元数据记录集,记录了RDD 内存所有的关系数据。

Guess you like

Origin blog.csdn.net/qq_43278189/article/details/121218395