一、理论

Spark 本身是基于内存计算的架构,数据的存储也主要分为内存和磁盘两个路径。在 Spark 当中,磁盘都用在哪些地方呢🤔️~

  1. 溢出临时文件

  2. 存储 Shuffle 中间文件

  3. 缓存分布式数据集

    磁盘的第三个作用就是缓存分布式数据集。也就是说,凡是带DISK字样的存储模式,都会把内存中放不下的数据缓存到磁盘

    Spark 将经常被重要的数据缓存到内存中以提升数据读取速度,当内存容量有限时,则将数据存入磁盘中或根据最近最少使用页面置换算法将内存中使用频率较低的文件空间收回,从而让新的数据进来。Spark 则根据存储位置、是否可序列化和副本数目这凡个要素将数据存储分为多种存储级别。

二、实现

2.1.架构设计

2.1.1. DiskBlockManager

DiskStore 负责 Spark 磁盘存储。依赖于 DiskBlockManager, DiskBlockManager 负责为逻辑的 Block 与数据写入磁盘的位置之间建立逻辑的映射关系

2.2.2. DiskStore

DiskStore 负责将 Block 存储到磁盘。