简述下Spark中的缓存(cache和persist)与checkpoint机制,并指出两者的区别和联系
缓存:
对于作业中的某些RDD,如果其计算代价大,之后会被多次用到,则可以考虑将其缓存,再次用到时直接使用缓存,无需重新计算。
是一种运行时性能优化方案。
checkpoint:
checkpoint是将某些关键RDD的计算结果持久化到文件系统,当task错误恢复时,调度系统会从checkpoint过的RDD开始计算,而不会从头计算。
二者区别和联系:
-
缓存是临时性的,如果发生错误,重新恢复后缓存失效,而且在使用结束后,应该主动清楚缓存;
-
checkpoint会将RDD相关数据和信息存储到文件系统,错误恢复时可以从文件系统将RDD重新恢复,checkpoint不需要主动清除;
-
缓存不会截断DAG,checkpoint会截断DAG;
-
由于checkpoint会触发重新计算,故可以在checkpoint前将对应的RDD缓存;
-
缓存和checkpoint都不是action,需要action触发才能执行真正缓存和checkpoint,,如下:
val rdd1 = rdd.cache()
rdd1.checkpoint()
rdd1.count()