spark2原理分析-RDD基本原理分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zg_hover/article/details/83048383

概述

RDD是spark的基础,本文描述了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是分布在多个jvm上。)

spark的rdd隐藏数据分区和数据分布,因此可以使用高级语言设计并行的计算框架。

RDD的基本特性

  • 弹性(Resilient)(容错性)

通过RDD血缘关系图(RDD lineage graph)来保证容错性。当由于节点宕机而导致计算失败,可以通过RDD的血缘关系图来重新计算丢失和损坏的分区。

  • 分布式(Distributed)

数据分布在集群的多个节点上。

  • 不可变(Immutable)

RDD的数据一旦创建就不能修改,只能通过transformations函数创建新的RDD。

RDD的其他特性

RDD除了介绍的基本特性,RDD还具有以下特性:

  • 数据集(Dataset)

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

  • 基于内存的(In-Memory)

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

  • 懒评估(Lazy evaluated)

transformations函数不会执行,直到执行action函数。(RDD的这两种函数后面会有文章专门讲解)

  • 可以持久化:

RDD的数据可以保存在缓存中,也可以持久化到硬盘。

  • 并行(Parallel)

RDD的数据处理是并行的。

  • 分区的(Partitioned)

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

  • RDD是类型(Typed)

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

  • 本地粘性

RDD可以定义首选的位置,让计算过程尽可能接近数据分区。

  • 其他说明

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

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

RDD的操作类型

RDDS支持两种操作:

  1. transformations(转换)

RDD的转换操作由RDD的转换函数来实现,它们是懒操作函数(lazy operations functions),用来返回另一个RDD。
之所以是lazy的,是由于,当调用它们时不会立即执行,只有等到actions函数执行时,才被执行。

  1. actions(动作/操作)

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

总结

本文介绍了spark RDD的基本概念和RDD的特性。通过本文介绍应该对Spark的核心:RDD有一个比较全面的了解。

猜你喜欢

转载自blog.csdn.net/zg_hover/article/details/83048383