RDD的缓存能够在第一次计算完成后,将计算结果保存到内存、本地文件系统或者Tachyon中。通过缓存,Spark避免了RDD上的重复计算,能够极大地提升计算速度。但是,如果缓存丢失了,则需要重新计算。如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容忽视的。
为了避免缓存丢失重新计算带来的开销,Spark又引入了检查点(checkpoint)机制。
缓存是在计算结束后,直接将计算结果通过用户定义的存储级别(存储级别定义了缓存存储的介质,现在支持内存、本地文件系统和Tachyon)写入不同的介质。
而检查点不同,它是在计算完成后,重新建立一个Job来计算。
为了避免重复计算,推荐 先将RDD缓存,这样就能保证检查点的操作可以快速完成。
设置检查点:
//设置检查点目录 存储在HDFS上,并使用checkpoint设置检查点,该操作属于懒加载
sc.setCheckpointDir("hdfs://IP:9000/checkpoint/")
rdd.checkpoint()