摘要:BlockManager 是 spark 中相当重要的一个组件,在spark的运行过程当中处处都有 BlockManager 的身影,只有搞清楚 BlockManager 的原理和机制,你才能更加深刻的理解 spark。
§ BlockManager是什么?
- BlockManager的做用?我理解是负责作RDD的存储,如何存下来给后续任务去使用。
其内部模块图以下:

- 图中看到有个memoryStore和DiskStore,说明把block作存储时,有内存和磁盘2种方式,存储后就都i经过这个Store去管理。
- 存储时以Block为单位,因此会有个映射用的数组
- 有一个负责和Driver的BlockManagerMaster通讯的引用接口
- 还有个shuffClient,负责作 备份 和 下载, 即各executor之间会经过shuffClient来作block的传输。
§ BlockManager和Driver、executor的关系
其关系如图:数组

从中能够看到缓存
- blockManagerMaster在driver端生成
- executor中生成blockManager,并负责向BMM注册。
- spark中注册消息经过ActorSystem进行发送
§ 把块block 存入blockManager的流程

好比特殊的2个地方:spa
- 试图put时,会先看下该blockId是否有缓存,有的话直接取过来,不然就从新建立blockInfo
- 存储时会先判断内存是否充足,充足就写入memoryStore,若是不够会先释放再尝试放入。
§ 从blockManager中删除块

删除的操做没什么特别的,主要是会判断一下块的存储级别,选择从不一样的store中取块。3d
§ shuffClient 下载block操做

BMMAC就是BlockManagerMasterActor,我当初瞎写的简称orm
- 注意点:当要取的块来自好几个BlockManager时, 把它打乱顺序,避免好几个BM同时从某一个BM上下载数据!
§ shuffeClinet的备份操做

- BM为何要备份他的block?书里做者没解释,个人理解是为了防止节点崩溃或者丢失,致使中间任务没法继续执行?
- 由于其余的BlockManager能接收的block可能有限,因此备份时可能会涉及多个block, 每次咱们同样,从BMmaster那里拿一个 ***随机***的blockManager作备份,避免都往同一个上备份。
§ BlockManager和Executor、driver的关系:

从中能够看到blog
- blockManagerMaster在driver端生成
- executor中生成blockManager,并负责向BMM注册。
- spark中注册消息经过ActorSystem进行发送
点击关注,第一时间了解华为云新鲜技术~接口