先简单的说一下对spark core的一些理解:
spark核心是RDD,也就是弹性分布式数据集。一个RDD上有多个partition。
计算过程是一个有向无环图DAG。
DAG由一个个的stage组成。stage划分规则是遇到宽依赖就划分一个stage。宽依赖和shuffle有关,在lineage中,父RDD上partition数据分配到子RDD的partition上,一对一,可直接传递数据,不需要借助磁盘shuffle,这就是窄依赖。一个partition数据分配到多个partition上,需要借助磁盘存储数据在进行分配,这就是shuffle过程。所以说,stage的存在是spark持久化特性的辅助因素。
进入正题:
spark持久化,三种方式Cache、persist、checkpoint。
简单理解:
都是对RDD进行存储,实现持久化,提高容错率。
要深入理解就要解读源码。
cache调用persist,缓存级别为MEMORY_ONLY。
persist有12大缓存级别,可根据情况自行调用。(详情参考博文:https://blog.csdn.net/houmou/article/details/52491419)
checkpoint出现在cache和persist之后,cache和persist将RDD存储在内存或者磁盘中。断电导致内存数据消失,电脑问题导致磁盘损坏,
这样将造成stage内RDD需要从头到尾的transformation,效率非常低。checkpoint解决了这一难题。在重要的RDD处设置checkpoint,实际上就
是将该RDD存储到了高可用的分布式文件系统HDFS上。实现了数据持久化,提升了spark的容错性能。