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
控制子目录数,默认是 64DiskBlockManager 是类对象 : 记录了逻辑数据块 Block 与磁盘中的物理文件的对应关系,每个 Block 都对应一个磁盘文件
getFile(BlockId)
把文件内容转为数据块putBytes
把字节序列存入磁盘文件获取 Shuffle 文件过程:
DiskStore.putBytes
将数据块写入文件DiskStore. getBytes
方法,读取 data/index 文件,将文件内容转化为数据块,再通过网络分发到 Reducer 端进行聚合计算
上一篇:JS 异步接口调用介绍