Spark 中 RDD 介绍

一、RDD 为何会产生?

Hadoop 的 MapReduce 是一种基于数据集的工作模式,面向数据,这种工作模式一般是从存储上加载数据集,然后操作数据集,最后写入物理存储设备。数据更多面临的是一次性处理。

MR 的这种方式在两个方面的效率很低。第一种是迭代式的算法,比如机器学习中 ALS、凸优化梯度下降等。这些都需要基于数据集或者数据集的衍生数据反复查询反复操作,MR 这种模式不太合适,即使多 MR 串行处理,性能和时间也是一个问题,数据的共享依赖于磁盘,读取磁盘会耗费大量时间。第二种就是 olap 场景下的即席查询,由于磁盘io的开销太大,运行时间太长,不能有效即时的查看数据结果。

MR中的迭代:
Spark 中 RDD 介绍_第1张图片
MR 中只能通过 job 串联的方式来处理复杂问题。

Spark中的迭代:
Spark 中 RDD 介绍_第2张图片
RDD 允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

二、RDD 介绍

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。

在 Spark 中,对数据的所有操作不外乎创建 RDD、转化已有 RDD 以及调用 RDD 操作进行求值。每个 RDD 都被分为多个分区,这些分区运行在集群中的不同节点上。RDD 可以包含 Python、Java、Scala 中任意类型的对象, 甚至可以包含用户自定义的对象。RDD 具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD 允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

RDD 支持两种操作:转化操作和行动操作。RDD 的转化操作是返回一个新的 RDD 的操作,比如 map() 和 filter(),而行动操作则是向驱动器程序返回结果或把结果写入外部系统的操作。比如 count() 和 first()。

1、弹性
(1) 存储的弹性:内存与磁盘的自动切换。
(2) 容错的弹性:数据丢失可以自动恢复。
(3) 计算的弹性:计算出错重试机制。
(4) 分片的弹性:可根据需要重新分片。

2、分布式
数据存储在大数据集群不同节点上。

3、数据集
RDD 封装了计算逻辑,并不保存数据。

4、数据抽象
RDD 是一个抽象类,需要子类具体实现。

5、不可变
RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在新的 RDD 里面封装计算逻辑

6、可分区、并行计算

三、RDD 核心属性

Spark 中 RDD 介绍_第3张图片

1、分区列表
Spark 中 RDD 介绍_第4张图片

2、分区计算函数
Spark 中 RDD 介绍_第5张图片

3、RDD 之间的依赖关系
Spark 中 RDD 介绍_第6张图片

4、分区器(可选)
Spark 中 RDD 介绍_第7张图片
5、首选位置(可选)
Spark 中 RDD 介绍_第8张图片

四、RDD 执行原理

从计算的角度来讲,数据处理过程中需要计算资源(内存 & CPU)和计算模型(逻辑)。执行时,需要将计算资源和计算模型进行协调和整合。

Spark 框架在执行时,先申请资源,然后将应用程序的数据处理逻辑分解成一个一个的计算任务。然后将任务发到已经分配资源的计算节点上,按照指定的计算模型进行数据计算,最后得到计算结果。

RDD 是 Spark 框架中用于数据处理的核心模型,在 Yarn 环境中,RDD 的工作原理如下:
1、启动 Yarn 集群环境
Spark 中 RDD 介绍_第9张图片

2、Spark 通过申请资源创建调度节点和计算节点
Spark 中 RDD 介绍_第10张图片
3、Spark 框架根据需求将计算逻辑根据分区划分成不同的任务
Spark 中 RDD 介绍_第11张图片

4、调度节点将任务根据计算节点状态发送到对应的计算节点进行计算
Spark 中 RDD 介绍_第12张图片
从以上流程可以看出 RDD 在整个流程中主要用于将逻辑进行封装,并生成 Task 发送给 Executor 节点执行计算。

你可能感兴趣的:(spark,分布式,大数据,spark,java,RDD)