RDD的基本原理

RDD(Resilient Distributed Dataset,也叫分布式弹性数据集)是Spark的核心抽象,在实现层面,RDD是一个抽象类,每种RDD都须要实现这个接口,因此Spark有多种RDD,每种RDD的实现方式都不相同。数组

本文描述了RDD的基本概念和RDD的性质,每种性质的实现会后面的文章详细介绍。缓存

概述

(Resilient Distributed Dataset) 弹性分布式数据集,又称RDD,是spark中数据的基本抽象,它是spark的核心。最先的rdd的设计思想能够参考论文:可伸缩性分布式数据集(Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing)。它表明一个能够并行操做的,不可修改的,分区元素的集合。网络

一个RDD是一个弹性的分布式记录集,它分布在一个或多个分区上。(能够把RDD和scala的collections 进行类比,不过scala的collections是在单个jvm上,而RDD是分布在多个执行节点上。)框架

Spark的RDD隐藏数据分区和数据分布,所以可使用高级语言设计并行的计算框架。jvm

RDD的基本特性

  • 弹性(Resilient)(容错性)分布式

经过RDD血缘关系图(RDD lineage graph)来保证容错性。当因为节点宕机而致使计算失败,能够经过RDD的血缘关系图来从新计算丢失和损坏的分区。ide

  • 分布式(Distributed)函数

数据分布在集群的多个节点上。在计算RDD数据时,也会在多个节点上进行计算。优化

  • 不可变(Immutable)lua

RDD的数据一旦建立就不能修改,只能经过Transformations操做来建立新的RDD。

RDD的其余特性

RDD除了介绍的基本特性,RDD还具备如下特性:

  • 数据集(Dataset)

多个RDD能够构成一个数据集。数据集也是多个分区的集合,这些数据多是主类型的值,或者是值的值。好比字符串的RDD,或者是数组的RDD。

  • 基于内存的(In-Memory)

RDD的数据尽量多、尽量长时间的保存在内存中。

  • 懒评估(Lazy evaluated)

RDD提供了两种类型的操做,一种操做叫:Transformation(转换);另外一种叫:Action(动做)。当调用RDD的Transformation操做函数时不会当即执行,直到调用Action函数才开始执行。(RDD的这两种操做会在后面的文章中专门介绍)

  • 能够持久化

RDD的数据能够保存在缓存中,也能够持久化到硬盘。RDD提供了多种存储级别,包括:内存,磁盘,还能够在存储RDD时对RDD进行序列化操做。

  • 并行(Parallel)

RDD的数据处理是并行的。因为RDD的数据分布在多个节点上,这种性质决定了它能够并行执行数据处理任务。

  • 分区的(Partitioned)

RDD的数据是分区的,数据被分布在集群的多个节点上。

  • RDD是有的类型(Typed)

每一个RDD都是有类型的,好比:RDD[Long]中的Long类型,RDD[(Int,String)]中的(Int, String)类型。

  • 本地粘性

RDD能够定义首选的位置,让计算过程尽量接近数据分区所在的位置。

  • 相互依赖

调用一个RDD的Transformation操做时会生成新的RDD,新生成的RDD和来源RDD就有了依赖关系。而多个Transformation操做就造成了一个依赖的DAG图(有向无环图)。当这个DAG图上某个RDD的数据丢失或损坏时,能够根据该DAG图为依据来从新计算。

  • 其余说明

在RDD中,分区的计算被设计成一个分布式的过程,是为了实现数据的均匀分布以及利用数据本地化(如HDFS分布式系统的数据分区)。

分区是并行处理的单元,你能够经过从新分区(repartition)或合并转换(coalesce)来控制分区的数量。Spark试图尽量靠近须要访问的数据,而不浪费时间经过RDD shuffling发送数据在网络上,建立的分区尽量和存储系统的保持一致,从而优化数据访问。

RDD的操做类型

RDD支持两种操做:

  1. Transformations(转换)

RDD的转换操做由RDD的转换函数来实现,它们是懒操做函数(lazy operations functions),用来建立另外一个RDD。之因此是lazy的,是因为,当调用它们时不会当即执行,只有等到actions函数执行时,才被执行。

  1. Actions(动做/操做)

当调用RDD的action函数时,将会触发计算,并返回计算结果。

小结

本文介绍了spark RDD的基本概念和RDD的特性。经过本文介绍应该对Spark的核心:RDD,有一个比较全面的了解。后面的文章会对这些特性的原理进行分析。

相关文章
相关标签/搜索