RDD理解及五大特性

1.什么是RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集是Spark中最基本的数据抽象

​ 一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。

​ 它代表一个不可变,可分区,里面的元素可并行计算的集合,RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

2.RDD的五大特性

可查看源码:https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
*  - A list of partitions
* - A function for computing each split
* - A list of dependencies on other RDDs
* - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
* - Optionally, a list of preferred locations to compute each split on (e.g. block locations for
* an HDFS file)

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

(2)一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实
现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计
算的结果。(对一个RDD做一个函数,其实是对RDD中所有的分区都执行了函数操作)

(3)RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成
类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系
重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。(RDD之间的转换存在依赖关系)

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

(5)一个列表,存储存取每个Partition的优先位置(preferred location)。对于
一个HDFS文件来说,这个列表保存的就是每个Partition所在的块的位置。按照“移动数
据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其
所要处理数据块的存储位置。

3.五大特性在源码中的体现

1
2
3
4
5
6
7
8
9
1.protected def getPartitions:Array[Partition]

2. def compute(split:Partition,context:TaskContext):Iterator[T]

3. protected def getDependencies:Seq[Dependency[_]]=deps

4. @transient val partitioner:Option[Partitioner]=None

5. protected def getPreferredLocations(split:Partition):Seq[String]=Nil

RDD图形理解:

WordCount图解RDD:

本文标题:RDD理解及五大特性

文章作者:skygzx

发布时间:2019年05月01日 - 08:33

最后更新:2019年05月08日 - 19:58

原始链接:http://yoursite.com/2019/05/01/RDD理解及五大特性/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
0%