BlockManager的运行过程
为了方便的讲解运行过程,如下图所示:
上图中将BlockManager运行过程中比较重要的组件画出来了,其中每个BlockManager中有比较重要的四个组件,DiskStore负责对磁盘上的数据进行读写;MemoryStore负责对内存中的数据进行读写;BlockTransferService负责对远程其他节点的数据读写;NettyBlockTransferService负责建立当前BlockManager到远程节点上的网络连接;
每个BlockManager创建完成之后,做的第一件事情,就是想BlockManagerMaster去注册,此时BlockManagerMaster会为其创建对应的BlockManagerInfo;
Driver上的BlockManager是在DAGScheduler初始化的时候创建的,它负责各个节点上的BlockManager内部元数据信息的管理,比如Block的增删改等,每次Block发生变化都会发送更新UpdateBlockInfo消息给BlockManagerMaster。
下面简单说说BlockManager1的读写操作,BlockManager1在发生读的时候,如果能从本地读取数据,那么就根据持久化级别使用MemoryStore或DiskStore从本地读取数据;假设没有读取到,那么会利用网络连接组件,连接到有数据的BlockManager2,使用BlockTransferService从BlockManager2上拉取数据。
BlockManager1发生写的时候,优先写入内存,假设内存不够,那么尝试释放一部分数据,假如当前要被释放的Block默认持久化级别是Memory,那么就是彻底删除了;假设持久化级别包含Disk,那么会写入Disk;如果写的时候也指定了replicate,那么会使用BlockTransferService将数据replicate一份到其他节点上去(是随机选择的一个节点)。