Storage模块详解

8.1 模块整体架构

Storage模块采用Master/Slave架构,Master负责整个Application的Block元数据信息的管理和维护;Slave负责将Block的更新等状态上报到Master,Master和Slave之间通过AKKA消息传递机制通信,Master与Slave之间并没有心跳检测而是间接通过Driver与Executor之间的心跳检测而来

Master的元数据信息管理与维护主要保存在BlockManagerMasterActor的三个数据结构中:

1)private valblockManagerInfo = new mutable.HashMap[BlockManagerId,BlockManagerInfo],保存BlockManagerId->BlockManagerInfo的映射,BlockManagerInfo保存Slave节点的内存使用情况、Block的状态、BlockManagerSlaveActor的Reference

2)private valblockManagerIdByExecutor=new mutable.HashMap[String,BlockManagerId]保存ExecutorID->BlockManagerId的映射

3)private valblockLocations=new JHashMap[BlockId,mutable.HashSet[BlockManagerId]],保存Block在哪些BlockManager上的HashMap,通过查询可知blockLocations可以找到某个Block所在的物理位置(HashSet说明该Block可能存在多个副本)

 

Slave的BlockManager创建后,需要向BlockManagerMasterActor发送RegisterBlockManager进行注册,master.registerBlockManager(blockManagerId,maxMemory,slaveActor)//参数分别为BlockManager标识,节点最大使用内存数,BlockManagerSlaveActor,利用blockManagerIdByExecutor把Slave信息保存在Master端

 

Driver端的实现:

SparkContext->SparkEnv->BlockManager->BlockManagerMaster转发请求至->BlockManagerMasterActor完成元数据管理和维护

 

Executor端的实现:

BlockManager->BlockManagerMaster持有Driver端的BlockManagerMasterActor的Reference,以此来完成Slave到Master的交互;除此之外BlockManager还拥有BlockManagerSlaveActor即该Actor的Reference会被上传到Master,Master会利用此Reference向Slave发送一些命令,比如删除Slave上的RDD、Shuffle相关的数据或者广播变量

 

8.1.2 源码组织结构

BlockManager提供读写Block的接口,BlockID格式是rdd_rddId_pa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值