1 什么是RDD
RDD: 弹性分布式数据集
出现目的: 为了能够支持更加高效的迭代计算操作
背景说明:
早期的计算模型: 单机计算模型
例如: MySQL / Excel
单机的计算模型
仅适用于: 小量数据集的处理操作
在计算操作的时候, 只有一个进程, 在一个进程中通过不断的迭代完成最终的计算操作
随着不断的发展, 整个社会数据量都在不断的增大, 原有单机的计算模型无法应对未来的数据处理需要, 怎么办呢? 分布式计算模型
核心: 采用多节点处理, 将一个任务拆分为N多个子任务, 分别运行在不同的节点上进行并行的处理,各个节点计算完成后, 将结果汇总处理即可 (分而治之)
诞生了相关的分布式计算框架: MR Spark Flink Storm ......
MR和Spark都是一个大规模的分布式计算引擎, 都可以处理大规模的数据;
MR存在的弊端: 1- 执行效率低 2- 迭代计算不方便
正因为MR存在一些弊端, 对于市场来说, 迫切需要一款能够解决MR痛点的架构:
1- 解决多次磁盘的IO问题, 整个计算尽可能都在内存中处理, 减少IO
2- 提供一个更加高效的迭代计算引擎
RDD的出现就是为了解决这个问题
MR的迭代模型:
Spark的迭代计算模型:
RDD是一个抽象的数据模型, RDD本身并不存储任何的数据, 仅仅是一个数据传输的管道, 在这个管道中,作为使用者, 只需要告知给RDD应该从哪里读, 中间需要进行什么样的转换逻辑操作, 以及最后需要将结果输出到什么位置即可, 一旦启动后, RDD会根据用户设定的规则, 完成整个处理操作
2 RDD的五大特性和五大特点
- 五大特性:
1- (必须的) RDD可分区的
2- (必须的) 每一个RDD都是由一个计算函数产生的
3- (必须的) RDD之间是存在着依赖关系
4- (可选的) 对于KV类型的数据, 是存在分区函数,对于KV类型的RDD默认是基于Hash 分区方案
5- (可选的) 移动数据不如移动计算(让计算程序离数据越近越好)
- RDD的五大特点:
1- RDD是可分区的: 分区是一种逻辑分区, 仅仅定义分区的规则,并不是直接对数据进行分区操作, 因为RDD本身不存储数据
2- RDD是只读的: 每一个RDD都是不可变的, 如果想要改变, 处理后会得到一个新的RDD, 原有RDD保存原样
3- RDD之间存在依赖关系: 每个RDD之间都是有依赖关系的, 也称为血缘关系, 一般分为两种依赖(宽依赖/窄依赖)
4- RDD可以设置cache(缓存): 当计算过程中, 一个RDD被多个RDD所依赖的时候, 可以将这个RDD结果缓存起来, 这样后续使用这个RDD的时候, 可以直接获取, 不需要重新计算
5- RDD的checkpoint(检查点): 与缓存类似, 都是可以将中间某一个RDD的结果保存起来, 只不过checkpoint支持持久化保存