
正文
Spark 缓存机制
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Spark中的缓存机制:避免spark每次都重算RDD以及它的所有依赖,cache()、persist()、 checkpoint()。
1、cache():会被重复使用,但是不能太大的RDD,将其cache()到内存当中,catch()属于 memory only 。cache 是每计算出一个要 cache 的 partition 就直接将其 cache 到内存中。缓存完之后,可以在任务监控界面storage里面看到缓存的数据。
spark cache (几种缓存方法):https://blog.csdn.net/zhuiqiuuuu/article/details/79290221
2、persist():可以设置缓存级别,如只在内存,只在磁盘,内存磁盘都用。
3、checkpoint():computing chain 计算链过长或依赖其他 RDD 很多的 RDD,就需要进行checkpoint,将其放入到磁盘当中。
checkpoint 需要等到job完成了,在启动专门的job去完成checkpoint 操作,因此RDD是被计算了两次的。一般使用过的时候配合rdd.cache(),这样第二次就不用重新计算RDD了,直接读取 cache 写磁盘。
rdd.persist(StorageLevel.DISK_ONLY) 与 checkpoint 也有区别,persist一旦程序执行结束,所有的缓存无论在内存还是磁盘都会被删掉。而而 checkpoint 将 RDD 持久化到 HDFS 或本地文件夹,如果不被手动 remove 掉,是一直存在的,也就是说可以被下一个 driver,program 使用,而 cached RDD 不能被其他 dirver program 使用。
同时:cache 跟 persist不会截断血缘关系,checkPoint会截断血缘关系。
补充:缓存太多的时候,spark会自动使用 LRU 缓存策略(最近最少使用缓存策略),将最老的分区从内存中移除。若下次使用被移除的分区时,只能重算。






