1.RDD简述
RDD简单的解释:
RDD是将数据项拆分为多个分区的集合,存储在集群的工作节点上的内存和磁盘中,并执行正确的操作。
复杂的解释:
RDD是用于数据转换的接口,如map算子、filter算子;
RDD指向了存储在HDFS、Cassandra、 HBase等、 或缓存
(内存、内存+磁盘、仅磁盘等),或在故障或缓存收回时重新计算其他RDD分区中的数据
RDD(Resilient Distributed Dataset):弹性分布式数据集,Spark计算的基石,为用户屏蔽了底层对数据的复杂抽象和处理,为用户提供了一组方便的数据转换与求值方法。
Spark 的核心是建立在统一的抽象 RDD 之上,基于 RDD 的转换和行动操作使得 Spark 的各个组件可以无缝进行集成,从而在同一个应用程序中完成大数据计算任务。
RDD 提供了一个抽象的数据架构,从而让开发者不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同 RDD 之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的存储,大大降低了数据复制、磁盘 IO 和序列化开销。
2.RDD特点
- 分布式( Distributed)
数据的计算并非只局限于单个节点,而是多个节点之间协同计算得到 - 分区
RDD是分区的,RDD里面的具体数据是分布在多台机器上的Executor里面的。堆内内存和堆外内存+磁盘。 - 不可变
RDD是不可变的,如果需要在一个RDD上进行转换操作,则会生成一个新的RDD - 数据集
RDD是只读的、分区记录的集合,每个分区分布在集群的不同节点上;
RDD并不存储真正的数据,只是对数据和操作的描述 - 弹性(Resilient)
自动进行存储方式的切换 RDD优先存放在内存中,当内存不足,Spark自动将RDD写入磁盘 - 容错性
根据数据血统,可以自动从节点失败中恢复分区;
基于Linage的高效容错机制,在任何时候都能进行重算,根据数据血统,可以自动从节点失败中恢复分区,各个分片之间的数据互不影响 - 计算
计算是分层的,有应用->Job->Stage->TaskSet->Task,每一层都有对应的计算的保障与重复机制,保障计算不会由于一些突发因素而终止。 - 分片
可以根据业务需求或者一些算子来重新调整RDD中的数据分布。
3.RDD运行原理
一个 RDD 就是一个分布式对象集合,提供了一种高度受限的共享内存模型,其本质上是一个只读的分区记录集合,不能直接修改。
每个 RDD 可以分成多个分区,每个分区就是一个数据集片段,并且一个 RDD 的不同分区可以保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。