(四)Spark源码理解之BlockManager---part2

2.BlockManagerMasterActor

BlockManagerMasterActor是主节点上的actor模型(消息传递模型),用来跟踪所有块管理器的信息,创建BlockManagerMatser时需要用到,它有比较重要的三个变量:

blockManagerInfo:HashMap容器,key值为BlockManagerID对象,value值为Bolck信息(即BlockManagerInfo对象),Block信息包括BlockManagerID,最大内存,以及从节点上的actor模型;

blockManagerIdByExecutor:HashMap容器,key值存放ExecutorID,value值为对应的BlockManagerID对象;

blockLocations:JHashMap容器,key值存放相应的块(BlockId对象),可能有多个块管理器拥有该块,所以value值就为管理该块的所有的块管理器所构成一个HashSet

BlockManagerActor中有几个主要的数据结构或者说类,这些类即为上述所说的三个变量的数据类型,简要介绍下:

2.1 BlockManagerId

    主要包括executorId,host,port等变量,实现了将BlockManagerId进行缓存以及输出和输入的任务,可以这样理解每一个分区都会由块管理器进行管理,我们用BlockManagerId给它进行标注,这些块管理器又都是由主节点上的块管理器(BlockManager)进行管理

2.2 BlockManagerInfo

   主要包括BlockManagerId,最大内存,以及从节点上的actor模型,其中还有个比较重要的变量:

private val _blocks = new JHashMap[BlockId, BlockStatus]

基于上面的理解,我们可以这样认为,_blocks就是用来存储每个块(分区)的状态

BlockStatus稍后会提到

BlockManagerInfo主要完成了如下任务:

    更新块信息UpdateBlockInfo:前面讲BlockManagerMaster时也提到过更新块信息,这里是更加具体的实现过程,或者可以理解为BlockManagerInfo更新块信息后通过BlockManagerMaster进行重新写或者重新读,包括判断块的存储方式, 添加块到_blocks中,使用_blocks.put()方法,从_blocks中删除相应的块的记录,使用_blocks.remove()

2.3 BlockId

 BlockIdBlock数据块(分区)的唯一标识,它有几种类型,相对应的就有几个比较重要的子类,如


 除此之外,还有ShuffleBlockIdBroadcastId等等,其中还有个判别是不是以及转换为RDDBlockId的方法


未完待续。。。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值