写点什么

Spark 的分布式存储系统 BlockManager 全解析

发布于: 2020 年 12 月 21 日

摘要: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 的关系

其关系如图:



从中可以看到

  1. blockManagerMaster 在 driver 端生成

  2. executor 中生成 blockManager,并负责向 BMM 注册。

  3. spark 中注册消息通过 ActorSystem 进行发送

§ 把块 block 存入 blockManager 的流程



比如特殊的 2 个地方:

  1. 试图 put 时,会先看下该 blockId 是否有缓存,有的话直接取过来,否则就重新创建 blockInfo

  2. 存储时会先判断内存是否充足,充足就写入 memoryStore,如果不够会先释放再尝试放入。

§ 从 blockManager 中删除块



删除的操作没什么特别的,主要是会判断一下块的存储级别,选择从不同的 store 中取块。

§ shuffClient 下载 block 操作



BMMAC 就是 BlockManagerMasterActor,我当初瞎写的简称

  • 注意点:当要取的块来自好几个 BlockManager 时, 把它打乱顺序,避免好几个 BM 同时从某一个 BM 上下载数据!

§ shuffeClinet 的备份操作



  • BM 为什么要备份他的 block?书里作者没解释,我的理解是为了防止节点崩溃或者丢失,导致中间任务无法继续执行?

  • 因为其他的 BlockManager 能接收的 block 可能有限,所以备份时可能会涉及多个 block, 每次我们一样,从 BMmaster 那里拿一个 ***随机***的 blockManager 做备份,避免都往同一个上备份。

§ BlockManager 和 Executor、driver 的关系:



从中可以看到

  1. blockManagerMaster 在 driver 端生成

  2. executor 中生成 blockManager,并负责向 BMM 注册。

  3. spark 中注册消息通过 ActorSystem 进行发送

 

点击关注,第一时间了解华为云新鲜技术~


发布于: 2020 年 12 月 21 日阅读数: 37
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
Spark的分布式存储系统BlockManager全解析