深度图解spark的cacheManager和DiskManager原理

网友投稿 718 2022-05-28

本文和之前发表的2篇文章有关联,建议先阅读前两篇文章

spark的内存管理机制学习——BlockManager

spark到底是怎么确认内存够不够用的?超大超详细图解!让你掌握Spark memeoryStore内存管理的精髓

spark中存在一个cacheManager,它的作用是什么? 缓存原理又是如何的?

以及和内存memoryStore对应的diskManager,它又是如何和内存管理做交互,实现spark很重要的落盘机制的?本文将给你进行一一讲解

深度图解spark的cacheManager和DiskManager原理

RDD缓存管理cacheManager

当需要计算RDD时,需要避免重复计算的RDD。

什么时候RDD可能会被重复计算?一般是宽依赖RDD, 即RDD的下游可能有多个, 但是另一个下游的拉去可能较慢, 那么此时需要做缓存。

cacheManager只是对RDD的管理, 真正的缓存以及获取是通过blockManager,然后根据内存情况选择存内存还是存磁盘。

RDD不是一定会做缓存,这取决于存储级别的设定。

RDD没缓存时, 不一定要重新计算, 也可能从CheckPoint中拿

checkPoint概念:

checkpoint在spark中主要有两块应用:一块是在spark core中对RDD做checkpoint,可以切断做checkpoint RDD的依赖关系,将RDD数据保存到可靠存储(如HDFS)以便数据恢复;另外一块是应用在spark streaming中,使用checkpoint用来保存DStreamGraph以及相关配置信息,以便在Driver崩溃重启的时候能够接着之前进度继续进行处理(如之前waiting batch的job会在重启后继续处理)。

如果需要存入内存,直接使用memoryStore即可,memoryStore的存储过程见上一篇博文。

如果要写入磁盘,需要调用diskStore提供的put方法把RDD对应的block块写入磁盘

diskStore和diskBlockManager有什么关系?

diskStore里要写入数据时,负责打开某个文件, 然后往文件里写入。

取出数据时,也是找到对应的文件,然后取出数据。

而这个磁盘文件的管理并没有放到diskStore里实现,而是独立了一个diskBlockManager模块。

以DiskStore的putArray方法为例,从下图可看出关系:

即文件相关、序列化相关,都让diskBlockManager来搞了。

diskBlockManager的getFile过程

上图里有个getFile的操作,即从DBM中拿到文件对象做写入。

那么这个文件创建时,怎么选路径,怎么命名?

首先,文件的路径和文件名, 使用2次哈希得到

使用2级哈希做路径的目的,是因为一级目录有多个,需要用哈希选择放到哪个一级目录。

每次创建文件的话,会把该文件放到DBM里的一个数组中,并加上钩子做管理,如果程序中止或者结束,需要主动清理临时文件。

DiskBlockManager全图:

EI企业智能 Java 可信智能计算服务 TICS 大数据 智能数据

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ZFS简介
下一篇:【AD小知识】阻焊层和助焊层的区别
相关文章