10.Spark的存储组件

在学习Spark应用开发的时候,也需要了解Spark相关的底层知识,这一次我们就了解Spark中的存储系统

首先说,Spark中的存储系统主要用于维护暂存在内存或者磁盘中的数据,包括Shuffle,中间文件,RDD Cache以及广播变量

对于这三种数据,分别有着不同的存储地址,首先是Shuffle中间文件,用于Shuffle中的计算过程中,产生了data和index文件,这一部分必然存储在磁盘之上

其次是RDD Cache,是分布式数据集在内存或者磁盘的物化,负责提高计算效率

广播变量则是在以Executors为粒度,进行存储一些变量,从而减少网络和内存开销

在Spark中,存储系统主要由BlockManagerMaster坐镇Driver 端

其次是在各个执行节点上的BlockManager

两者之间信息互换,BlockManagerMaster从BlockManager收集了各个节点上

那么BlockManager的数据来源于哪里,还是要从使用者来进行区分,首先是Shuffle中间文件,必然来源于节点磁盘,广播变量主要占用内存空间,RDD Cache则是既可以使用内存,也可以使用磁盘。

既然有来源于磁盘的,也有来源于内存的,我们就要分开看这两者的管理方式

不过首先说,不论是在磁盘,还是在内存中,数据都是以数据块Blocks为粒度进行存取的,而有了Blocks,就需要去维护这些Blocks的元数据

元数据中大致保存的结构如下

对于内存,则是利用了MemoryStore进行保存Blocks元数据

其中利用了LinkedHashMap进行保存,其中的Key是BlockId,Value是MemoryEntry

BlockId其实就是记录Block元数据的数据结构,保存了名字,所属的RDD,分区,是否是广播变量等信息

对应的MemoryEntry对象则是通往数据实体的地址

就比如RDD Cache,我们在创建缓存的时候,就会先以数据分区为粒度,计算RDD执行结果,然后封装为MemoryEntry,创建BlockId,然后添加到LinkedHashMap

 

其次是DiskStore 磁盘数据管理

DiskStore是由DiskBlockManager管理的

DiskBlockManager负责了实际的磁盘读取管理,通过BlockId访问磁盘文件

 

那么总结一下,Spark中的存储系统主要分为两个方面,分别是Driver端和Executors端,对应的组件是BlockManagerMaster和BlockManager

以及管理内存的MemoryStore和DiskStore

 

发表评论

邮箱地址不会被公开。 必填项已用*标注