Spark系列(六)SparkCore--RDD简介

前言

RDD是Spark的基石,是实现Spark数据处理的核心抽象。那么RDD为什么会产生呢?

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

MR的这种方式对数据领域两种常见的操作不是很高效。第一种是迭代式的算法。比如机器学习中ALS、凸优化梯度下降等。这些都需要基于数据集或者数据集的衍生数据反复查询反复操作。MR这种模式不太合适,即使多MR串行处理,性能和时间也是一个问题。数据的共享依赖于磁盘。另外一种是交互式数据挖掘,MR显然不擅长。

MR中的迭代:

这里写图片描述

Spark中的迭代:

这里写图片描述

一、RDD简介

RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。在 Spark 中,对数据的所有操作不外乎创建 RDD、转化已有RDD 以及调用 RDD 操作进行求值。每个 RDD 都被分为多个分区,这些分区运行在集群中的不同节点上。

RDD 其实是spark为了减少用户对于不同数据结构之间的差异而提供的数据封装,为用户提供了很多数据处理的操作。

RDD三个特点:

1、不可变,在RDD上调用转换算子,会生成一个新的RDD,不会更改原RDD的数据结构。

2、可分区,RDD的数据可以根据配置分成多个分区,每个分区都被一个Task任务去处理,你可以认为分区数就是并行度

3、弹性

  • 存储的弹性,RDD的数据可以在内存和磁盘进行自动切换,对用户透明。

Spark优先把数据放到内存中,如果内存放不下,就会放到磁盘里面,程序进行自动的存储切换

  • 计算的弹性,RDD的计算之间会有重试机制,避免由于网络等原因导致的任务失败。

  • 容错的弹性,RDD可以通过血统机制来进行RDD的恢复。

在RDD进行转换和动作的时候,会形成RDD的Lineage依赖链,当某一个RDD失效的时候,可以通过重新计算上游的RDD来重新生成丢失的RDD数据。

  • 分区的弹性,你可以根据需求来动态改变RDD分区的分区数,也就是动态改变了并行度。

二、Spark到底做了什么?

从外部空间将数据加载到Spark,对数据进行转换、缓存最后将数据通过行动操作保存到外部空间。

这里写图片描述

RDD来说有两种处理数据的方式,一种叫转换操作【一个RDD调用该方法后返回一个RDD】,另外一种叫行动操作【一个RDD调用该方法后返回一个标量或者直接将数据保存到外部空间】

RDD是懒执行的,如果没有行动操作出现,所有的转换操作都不会执行。

猜你喜欢

转载自blog.csdn.net/u012834750/article/details/81018922