RDD Persist
RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据缓存在(BlockManager)JVM的堆内存中。不是说这两个方法被调用时立即缓存,而是触发后面的action算子时,该RDD将会被缓存在计算节点的内存中,供后面重用。
Cache是调用的无参Persist方法,存储级别为MEMORY_ONLY。
如果需要从内存中清除缓存,可以使用unpersist()方法。RDD持久化是可以手动选择不同的策略的。在调用persist()时传入对应的StorageLevel即可。
检查点 RDD CheckPoint
检查点其实就是通过将RDD中间结果写入磁盘。由于血缘依赖过长会造成容错成本过高,这样就不如在中间阶段做检查点容错。如果检查点之后节点出现问题,可以从检查点开始重做血缘,减少了开销。同理,也是在执行Action操作才能触发。
缓存和检查点的区别
- Cache缓存只是将数据保存在BlockManager中,不切断血缘依赖。CheckPoint检查点切断血缘依赖,只有一个强行设置的checkpointRDD。
- Cache缓存数据通常存储在磁盘、内存等地方,可靠性低。CheckPoint的数据通常存储在HDFS等容错、高可用的文件系统,可靠性高。