Spark内存存储MemoryStore & 磁盘存储DiskStore

本文介绍了Spark BlockManager中的MemoryStore和DiskStore。MemoryStore用于存储非序列化和序列化的Java对象,优先存储在内存,不足时转存至DiskStore。DiskStore则通过NIO进行块的磁盘读写。内容包括MemoryStore的数据存储与获取方法,以及DiskStore的NIO读写操作。
摘要由CSDN通过智能技术生成

简介

BlockManager中block的实际存储是由MemoryStore和DiskStore来实现的,根据Block要求的存储级别StorageLevel来决定是存储在内存还是磁盘,以及是序列化存储还是非序列化存储。MemoryStore和DiskStore是在BlockManager中初始化的。

// BlockManager.scala
// Actual storage of where blocks are kept
private[spark] val memoryStore =
  new MemoryStore(conf, blockInfoManager, serializerManager, memoryManager, this)
private[spark] val diskStore = new DiskStore(conf, diskBlockManager, securityManager)
memoryManager.setMemoryStore(memoryStore)

内存存储MemoryStore

MemoryStore负责将没有序列化的Java对象数组或者序列化的ByteBuffer存储到内存中。如果block的存储同时支持内存和磁盘存储,则优先存储到MemoryStore中,内存不够时再存储到DiskStore。

内存主要由堆内内存和堆外内存构成,其中堆外内存只能存储序列化后的值。MemoryStore中主要的成员是entries(即LinkedHashMap[BlockId, MemoryEntry]),用来保存块存储的映射。所有块的添加、获取和删除等操作,都是基于该映射结构实现的,因此对其所有的操作都需要加同步语义。

// Note: all changes to memory al
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值