Spark存储体系——BlockManagerMaster对BlockManager的管理

BlockManagerMaster的作用是对存在于Executor或Driver上的BlockManager进行统一管理。Executor与Driver关于BlockManager的交互都依赖于BlockManagerMaster,比如Executor需要向Driver发送注册BlockManager、更新Executor上Block的最新信息、询问所需要Block目前所在的位置及当Executor运行结束需要将此Executor移除等。但是Driver与Executor却位于不同机器中,该怎么实现呢?

在Spark执行环境一节中有介绍过,Driver上的BlockManagerMaster会实例化并且注册BlockManagerMasterEndpoint。无论是Driver还是Executor,它们的BlockManagerMaster的driverEndpoint属性都将持有BlockManagerMasterEndpoint的RpcEndpiointRef。无论是Driver还是Executor,每个BlockManager都拥有自己的BlockManagerSlaveEndpoint,且BlockManager的slaveEndpoint属性保存着各自BlockManagerSlaveEndpoint的RpcEndpointRef。BlockManagerMaster负责发送消息,BlockManagerMasterEndpoint负责消息的接收与处理,BlockManagerSlaveEndpoint则接收BlockManagerMasterEndpoint下发的命令。

1 BlockManagerMaster的职责

BlockManagerMaster负责发送各种与存储体系相关的信息,这些消息的类型如下:

  • RemoveExecutor(移除Executor)
  • RegisterBlockManager(注册BlockManager)
  • UpdateBlockInfo(更新Block信息)
  • GetLocations(获取Block的位置)
  • GetLocationsMultipleBlockIds(获取多个Block的位置)
  • GetPeers(获取其它BlockManager的BlockManagerId)
  • GetExecutorEndpointRef(获取Executor的EndpointRef引用)
  • RemoveBlock(移除Block)
  • RemoveRdd(移除Rdd Block)
  • RemoveShuffle(移除Shuffle Block)
  • RemoveBroadcast(移除Broadcast Block)
  • GetMemoryStatus(获取指定的BlockManager的内存状态)
  • GetStorageStatus(获取存储状态)
  • GetMatchingBlockIds(获取匹配过滤条件的Block)
  • HasCachedBlocks(指定的Executor上是否有缓存的Block)
  • StopBlockManagerMaster(停止BlockManagerMaster)

可以看到,BlockManagerMaster能够发送的消息类型多种多样,为了更容易理解,以RegisterBlockManager为例:

//org.apache.spark.storage.BlockManagerMaster
def registerBlockManager(
    blockManagerId: BlockManagerId, maxMemSize: Long, slaveEndpoint: RpcEndpointRef): Unit = {
  logInfo(s"Registering BlockMana
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值