Spark Storage ① - Spark Storage 模块整体架构

本文为 Spark 2.0 源码分析笔记,某些实现可能与其他版本有所出入

Storage 模块在整个 Spark 中扮演着重要的角色,管理着 Spark Application 在运行过程中产生的各种数据,包括基于磁盘和内存的,比如 RDD 缓存,shuffle 过程中缓存及写入磁盘的数据,广播变量等。

Storage 模块也是 Master/Slave 架构,Master 是运行在 driver 上的 BlockManager实例,Slave 是运行在 executor 上的 BlockManager 实例。

Master 负责:

  • 接受各个 Slaves 注册
  • 保存整个 application 各个 blocks 的元数据
  • 给各个 Slaves 下发命令

Slave 负责:

  • 管理存储在其对应节点内存、磁盘上的 Blocks 数据
  • 接收并执行 Master 的命令
  • 更新 block 信息给 Master

整体架构图如下(包含1个 Master 和4个 Slaves):

Storage 模块 Master Slaves 架构.jpg

在 driver 端,创建 SparkContext 时会创建 driver 端的 SparkEnv,在构造 SparkEnv 时会创建 BlockManager,而该 BlockManager 持有 RpcEnv 和 BlockManagerMaster。其中,RpcEnv 包含 driverRpcEndpoint 和各个 Slave 的 rpcEndpointRef(存储在blockManagerInfo: mutable.HashMap[BlockManagerId, BlockManagerInfo] 中,BlockManagerInfo 包含对应 Slave 的 rpcEndpointRef),Storage Master 就是通过这些 Slaves 的 rpcEndpointRef 来给 Storage Slave 发送消息下达命令的

而在 slave 端(各个 executor),同样会创建 SparkEnv,创建 SparkEnv 时同样会创建 BlockManager,slave 端的 BlockManager 同样会持有 RpcEnv 以及 BlockManagerMaster。不同的是,slave 端的 RpcEnv 包含了 slaveRpcEndpoint 而 BlockManagerMaster 持有 driverRpcEndpoint, Storage Slave 就是通过 driverRpcEndpoint 来给 Storage Master 发送消息的

好,基于上图和相应的文字说明相信能对 Spark Storage 模块的整体架构有个大致的了解,更深入的分析将在之后的文章中进行~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容