[第十七章]CacheManage原理剖析

我们知道一个task在执行一个RDD时,会调用rdd的iterator()方法,计算当前的partition.

但是,如果之前从来没有对这个RDD进行持久化,那么实际上是从RDD的父RDD来执行我们的算子来计算新的RDD的partition数据。

如果这个RDD以前持久化过,那么就是说它的StoreLevel肯定不是NONE,那么此时CacheManager就会帮忙我们直接去找到持久化的数据

虽然我们持久化过,但如果因为一些原因,数据却拿不到了,BlockManager首先从本地读取数据,如果本地没有,则尝试从远程获getRemote()方法

如果远程也无法获取数据,会尝试读取之前checkpoint过的数据,如果连checkpoint的数据都没有读取到,那么就只能重新计算一份,并把计算完的数据进行持久化

对数据持久化,当持久级别是硬盘时,就直接用BlockManager.doPut()方法持久化

对数据持久级别是内存时,先保存数据到内存,如果内存不够时,会调用自己的算法,把内存中的一部分数据持久化磁盘,整理出来一部分空间,然后在将数据写入内存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容