【源码解析】BlockManager详解

1 Block管理模块的组件和功能

  • BlockManager:BlockManager源码解析
    • Driver和Executor都会建立
    • Block的put、get和remove等操做的实际执行者
  • BlockManagerMaster:BlockManagerMaster源码解析框架

    • 做为BlockManagerMasterEndpoint的代理类,隐藏实体类
    • 执行BlockManager中注册等操做
  • BlockManagerMasterEndpoint:BlockManagerMasterEndpoint源码解析
    • 响应远程调用的实体类
    • 维护BlockManager的元数据
    • 拥有移除RDD、获取Block和更新BlockInfo等功能
  • BlockManagerSlaveEndpoint:BlockManagerSlaveEndpoint源码解析
    • Executor端响应远程调用的类
    • 内部实际调用BlockManager执行具体操做
  • BlockManagerInfo: BlockManagerInfo源码解析
    • 维护着每一个BlockManager中所管理的Block
    • 持有BlockManagerSlaveEndpoint的实例
  • BlockManagerId:BlockManagerId源码解析
    • 做为每一个BlockManager的惟一标识
  • StorageLevel: StorageLevel源码解析
    • 用来描述Block的存储级别(存储位置、是否序列化和副本数)
  • MemoryStore
    • 内存读写实际执行者
  • DiskStore
    • 磁盘读写实际执行者

2 总体框架

BlockManager

3 个人思考

在一开始分析BlockManager(BM)、BlockManagerMaster(BMM)、BlockManagerMasterEndpoint(BMME)和BlockManagerSlaveEndpoint(BMSE)时我就感受它们之间的功能定义和关系不是特别的清晰。
1)BMM做为BMME的代理类,隐藏了BMME的实现,由BMME来完成实际响应远程调用的动做,这个仍是比较清晰的,由于BMME维护着BlockManager的元数据信息,由它来完成信息的增删查这个是彻底没有问题的。
2)个人疑惑就在于BlockManager的定位是什么?
首先从类设计原则来看,类的功能单一且清晰是比较重要的,由于这样能够清楚地看到类的定位设计

  • 完成实际数据的put、get和remove?这个在BM源码中咱们能够看到putBytes、getBytes等方法,这是没有问题的
  • BlockManager向Driver注册等

那么BlockManager的定位就是处理一切跟Block读写等有关的工做和注册等工做代理

3)可是我想来想去这个BlockManager就是处理Slave端的实际Block读写,那么应该叫作BlockManagerSlave更贴切,可是做为一个优秀的开源项目,不该该会出现这样的问题。那么多是个人理解问题,因而我又进行下面的思考:
Driver和Executor都有BlockManager,那么Driver端BlockManager的做用仅仅是维护Executor端的BlockManager元数据的话,那么Driver根本就不必建立BlockManager,使用BlockManagerMaster就能够。因此极可能设计目的就是这样的:blog

  • BlockManager的设计目的是做为slave端的实际block管理类
  • Driver端的BlockManager实际由两部分功能组成:
    • 拥有Slave端BlockManager实际操做Block的功能
    • 用BlockManagerMaster来实现Slave端全部BlockManager元数据的维护
相关文章
相关标签/搜索