美文网首页
分别简述spark中的缓存机制与checkpoint机制,并指出

分别简述spark中的缓存机制与checkpoint机制,并指出

作者: scott_alpha | 来源:发表于2019-09-30 22:19 被阅读0次

两者都是做RDD持久化的。

缓存机制包括cache()和persist():

需要使用cache的场景,会被重复使用并且不能太大的RDD需要cache,cache只使用memory,写磁盘的话那就叫checkpoint了。需要使用checkpoint的场景,运算时间很长或者运算量太大才能得到的RDD。实际上,将shuffleMapTask的输出结果存放到本地磁盘也算是checkpoint,只不过这个checkpoint目的是输出数据到partition。
cache的机制是,每计算出一个要cache的partition就直接将其cache到内存。但checkpoint不一样,它是等到job结束后另外启动专门的job去完成checkpoint,也就是说需要checkpoint的RDD会被计算两次。因此,在使用rdd.checkpoint()的时候,建议加上rdd.cache(),这样第二次运行的job就不用再去计算该rdd了,直接读取cache写磁盘。

persist()与checkpoint()

深入一点讨论,rdd.persist(StorageLevel.DIST_ONLY)与checkpoint的区别。persist虽然可以将RDD的partition持久化到磁盘,但该partition由blockManager管理。一旦driverprogram执行结束,也就是executor所在进程CoarseGrainedExecutorBackend stop,BlockManager也会stop,被cache到磁盘上的RDD也会被清空(整个BlockManager使用的local文件夹被删除)。
而checkpoint将RDD持久化到HDFS或本地文件夹,如果不被手动remove,则会一直存在,也就是说可以被下一个driver program使用,而cached RDD不能被其他driver program使用。
同时,cache和persist不会截断血缘关系,checkpoint会截断血缘关系。

相关文章

网友评论

      本文标题:分别简述spark中的缓存机制与checkpoint机制,并指出

      本文链接:https://www.haomeiwen.com/subject/cqihpctx.html