Spark 存储系统架构:

Spark 存储系统维护的数据 :
BlockManagerMaster/BlockManager 之间交换的信息 (Executors 的数据状态) :

BlockManager 负责:管理数据块的元数据(Meta data),这些元数据记录并维护数据块的地址、位置、尺寸以及状态

BlockManager 的存储抽象 :
Spark 存储系统支持两种类型:
MemoryStore 用 MemoryEntry 封装了两种数据存储:存储对象值,字节数组
MemoryStore 用 LinkedHashMap 记录数据块的信息

MemoryEntry 有两个实现类:
创建 RDD Cache 过程:
(BlockId,MemoryEntry)键值对添加到 LinkedHashMap
详细过程:
putIteratorAsValues/putIteratorAsBytes ,把 RDD 展开为数据值,把数据暂存到 ValuesHolder 结构中toArray/toByteBuffer ,把 ValuesHolder 转为 MemoryEntry 结构LinkedHashMap[BlockId, MemoryEntry] 链式哈希字典中
DiskStore :维护数据块与磁盘文件的对应关系,实现磁盘数据的存取访问
DiskStore 的数据存取过程:
spark.local.dir 下创建目录和子目录,spark.diskStore.subDirectories 控制子目录数,默认是 64
DiskBlockManager 是类对象 : 记录了逻辑数据块 Block 与磁盘中的物理文件的对应关系,每个 Block 都对应一个磁盘文件
getFile(BlockId)把文件内容转为数据块putBytes 把字节序列存入磁盘文件
获取 Shuffle 文件过程:
DiskStore.putBytes将数据块写入文件DiskStore. getBytes 方法,读取 data/index 文件,将文件内容转化为数据块,再通过网络分发到 Reducer 端进行聚合计算
上一篇:JS 异步接口调用介绍