摘要: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个中央:
- 试图put时,会先看下该blockId是否有缓存,有的话间接取过去,否则就从新创立blockInfo
- 存储时会先判断内存是否短缺,短缺就写入memoryStore,如果不够会先开释再尝试放入。
§ 从blockManager中删除块
删除的操作没什么特地的,次要是会判断一下块的存储级别,抉择从不同的store中取块。
§ shuffClient 下载block操作
BMMAC就是BlockManagerMasterActor,我当初瞎写的简称
- 留神点:当要取的块来自好几个BlockManager时, 把它打乱程序,防止好几个BM同时从某一个BM上下载数据!
§ shuffeClinet的备份操作
- BM为什么要备份他的block?书里作者没解释,我的了解是为了避免节点解体或者失落,导致两头工作无奈继续执行?
- 因为其余的BlockManager能接管的block可能无限,所以备份时可能会波及多个block, 每次咱们一样,从BMmaster那里拿一个 随机的blockManager做备份,防止都往同一个上备份。
§ BlockManager和Executor、driver的关系:
从中能够看到
- blockManagerMaster在driver端生成
- executor中生成blockManager,并负责向BMM注册。
- spark中注册音讯通过ActorSystem进行发送
点击关注,第一工夫理解华为云陈腐技术~