Spark的缓存管理解析
[睡着的水-hzjs-2016.08.24]
一、CacheManager分析
1、CacheManager管理的缓存,而混存可以是基于内存的缓存,也可以是基于磁盘的缓存;
2、CacheManager需要通过BlockManager来操作数据;
3、当Task 运行的时候会调用RDD的compute方法进行计算,而compute 方法会调用iterator方法:
二、CacheManager源码的详解
1、Cache 在工作的时候会最大化的保留数据,但是数据不一定绝对完整,因为当前的计算如果需要内存空间的话看,那么Cache在内存中的数据必须让出空间,此时如果在RDD持久化的时候同时指定了可以把数据放在Disk 上,那么部分Cache 的数据可以从内存转入磁盘,否则的话数据就会丢失!!!
2、具体CacheManager在获得缓存数据的时候会通过BlockManager 来抓到数据;
3、CacheManager 没有通过BlockManager获得缓存内容的话,此时会通过RDD的如下方法来获得数据:
上述方法首先会查看当前的RDD是否进行了Checkpoint,如果进行了话直接读取checkpoint的数据,否则的话就必须进行计算来计算之后通过putInBlockManager缓存起来