RDD基础学习

1. RDD基础

1.1 为什么要有RDD

迭代式算法和交互式数据挖掘中存,不同计算阶 段之间会重用中间结果,为了减少中间结果写磁盘带来的数据复制、磁盘IO和序列化开销,spark提供了一个抽象的数据模型——RDD

通过RDD只需将具体的应用逻辑表达为一系列转换操作(函数),不同 RDD 之间的转换操作之 间还可以形成依赖关系,进而实现pipeline,减少了中间结果的存储,大大降 低了数据复制、磁盘 IO 和序列化开销,并且还提供了更多的 API(map/reduec/filter/groupBy...)。

1.2 RDD是什么

Resilient Distributed Dataset,弹性分布式数据集, 是 Spark 中最 基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。 
  • Resilient :弹性的,RDD 里面的中的数据可以保存在内存中或者磁盘里面;
  • Distributed :它里面的元素是分布式存储的,可以用于分布式计算;
  • Dataset: 一个集合,可以存放很多元素(而不是数据)。

1.1.3 RDD主要属性

1、a list of partitions一组分片(Partition)/一个分区(Partition) 列表,即数据集的基本组成单位。 对。

2、a function of computing each split:作用在每一个 分区 的函数。Spark 中 RDD 的计算是以分片为单位的,compute 函数会被作用 到每个分区上。

3、A list of dependencies on other RDDs :一个 RDD 会依赖于其他多 个 RDD。 数据丢失时,基于此依赖可以恢复数据。

4、Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned): 可选, KV 类型的 RDD 会有一个 Partitioner,即 RDD 的分区函数,默认为 HashPartitioner。

5、Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file): 可选项,一个列表,存储 存取每个 Partition 的优先位置(preferred location)。 移动数据不如移动计算,Spark 在进行任务调度的时候,会 尽可能选择那些存有数据的 worker 节点来进行任务计算。

2. RDD算子

3. RDD持久化/缓存

RDD 通过 persist 或 cache 方法可以将前面的计算结果缓存,但是并不是这两 个方法被调用时立即缓存,而是触发后面的 action 时,该 RDD 将会被缓存在 计算节点的内存中,并供后面重用。
        1. RDD 持久化/缓存的目的是为了提高后续操作的速度
        2. 缓存的级别有很多,默认只存在内存中,开发中使用 memory_and_disk
        3. 只有执行 action 操作的时候才会真正将 RDD 数据进行持久化/缓存
        4. 实际开发中如果某一个 RDD 后续会被频繁的使用,可以将该 RDD 进行持 久化/缓存。

4. RDD容错机制Checkpoint

持久化的局限: 持久化/缓存可以把数据放在内存中,虽然是快速的,但是也是最不可靠的;也可以把数据放在磁盘上,也不是完全可靠的,例如磁盘会损坏等。
问题解决:checkpoint机制。 Checkpoint 的时候一 般把数据放在在 HDFS 上,这就天然的借助了 HDFS 天生的高容错、高可靠来实 现数据最大程度上的安全,实现了 RDD 的容错和高可用。
SparkContext.setCheckpointDir("目录") //HDFS 的目录
RDD.checkpoint
小结:
开发中保证数据安全性及读取效率: 对频繁使用且重要的 数据,先做缓存/持久化,再做 checkpint。
位置: Persist 和 Cache 只能保存在本地的磁盘和内存中(或者堆外内 存--实验中) Checkpoint 可以保存数据到 HDFS 这类可靠的存储上。
生命周期: Cache 和 Persist 的 RDD 会在程序结束后会被清除或者手动调用 unpersist 方Checkpoint 的 RDD 在程序结束后依然存在, 会被删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值