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
BlockId是Block数据块(分区)的唯一标识,它有几种类型,相对应的就有几个比较重要的子类,如
除此之外,还有ShuffleBlockId,BroadcastId等等,其中还有个判别是不是以及转换为RDDBlockId的方法
未完待续。。。。。