3.RDD介绍

RDD介绍

Spark-Core是spark-streaming运行的数据支持的底层,学习spark-core主要是学习RDD及其操作

RDD

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

  • 抽象,意味着我们用的主要是他们的共有方法
  • 不可变,对RDD的操作都会生成一个新的RDD,不可变的优势是保证了线程安全
  • 可分区,可以交给不同的分区处理,

RDD的属性

  1. 由分区组成,可以认为分区是RDD的基本组成单位
  2. Rdd的分区为逻辑分区,需要compute函数进行实际的分片
  3. RDD存有与其他RDD之间的依赖关系

RDD的特点

  1. 弹性
    • 存储的弹性,内存与磁盘的自动切换
    • 容错的弹性,数据丢失可以自动回复,如果有一个分区丢失,可以从最原始的部分重新计算。
    • 计算的弹性,计算出错重试机制
    • 分片的弹性,可根据需要重新分片
  2. 分区
    • RDD逻辑上分区,每个分区的数据抽象存在计算的时候会通过一个compute函数得到每个分区的数据。
  3. 只读
    • RDD 是只读的,(不用担心线程安全,)要想改变 RDD 中的数据,只能在现有 RDD 基础上创建新的 RDD(原来的不消失,保证容错性)
    • 对RDD的操作算子包括transformation和action两类,
  4. 依赖
    • RDD之间通过操作算子进行转化,转换得到的新的RDD包含了从其他RDDs 衍生所必需的信息,RDDs 之间维护着这种血缘关系,也称之为依赖,依赖包括宽依赖和窄依赖两种。宽依赖的变化意味shuffle,一般避免宽依赖的出现
  5. 缓存
    • 如果在应用程序中多次使用同一个 RDD,可以将该 RDD缓存起来,该 RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该 RDD的时候,会直接从缓存处取而不用再根据血缘关系计算,这样就加速后期的重用。类似于hadoop的分布式缓存。
  6. checkPoint
    • 于长时间迭代型应用来说,随着迭代的进行,RDDs 之间的血缘关系会越来越长,一旦在后续迭代过程中出错,则需要通过非常长的血缘关系去重建,势必影响性能。因此可以再某处将数据保存到磁盘中,之后的RDD在恢复时就不需要从头再来了。
发布了118 篇原创文章 · 获赞 5 · 访问量 7162

猜你喜欢

转载自blog.csdn.net/resilienter/article/details/103876430
rdd