深度图解spark的cacheManager和DiskManager原理

举报
breakDawn 发表于 2022/03/27 01:27:06 2022/03/27
【摘要】 spark中存在一个cacheManager,它的作用是什么? 缓存原理又是如何的? 以及和内存memoryStore对应的diskManager,它又是如何和内存管理做交互,实现spark很重要的落盘机制的?本文将给你进行一一讲解

本文和之前发表的2篇文章有关联,建议先阅读前两篇文章
spark的内存管理机制学习——BlockManager
spark到底是怎么确认内存够不够用的?超大超详细图解!让你掌握Spark memeoryStore内存管理的精髓


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


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全图:
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。