RDD缓存与持久化

RDD缓存:

  RDD缓存是spark中的重要特性。默认情况下,RDD的内容是临时的,每个RDD只能使用一次,如果某个RDD需要重复使用则需要从最开始的父RDD重新计算,计算量较大且耗时,使用缓存或持久化后,第一次计算出RDD内容之后,可以将每个RDD的结果缓存在集群的内存或磁盘中,后续调用以来该RDD的动作时可直接从缓存分区中返回,实现动作的重用,从而提高spark的速度。

  不足:

    缓存操作为懒加载,必须有action类算子触发才能执行操作

    使用内存或磁盘缓存时,可能被JVM当作垃圾回收,或是损坏或认为删除

RDD持久化:  

  RDD缓存机制实质上是一种特殊的持久化。缓存机制当中将RDD的相关内容缓存到内存或磁盘当中,当RDD损坏时可以通过血统机制重新计算从而恢复数据。但在持久化当中,checkpoint将RDD缓存至HDFS当中,而且放弃了RDD之间的依赖性,利用HDFS中文件有多个备份以及副本的机制保证了数据的容错性,提升了数据的安全性。另一方面,缓存机制当中RDD的分区由blockmanager管理,blockmanager的生命周期随着进程的结束而结束,缓存到内存上的RDD也会被清空,而持久化中checkpoint将RDD缓存到HDFS当中,只能被手动删除。

posted @ 2020-03-22 23:00  佚名博主  阅读(297)  评论(0)    收藏  举报