- BlockManager 会运行在 driver 和 Executor 上面,在 driver 上面的 BlockManager
是负责管理整个集群所有 Executor 中的 BlockManager,BlockManager 本身也是 Master-Slave
结构的,所谓Master-Slave 结构就是一切的调度和工作都是由 Master 去触发的,Slave本身就是专注于干活的,而
Executor 在启动的时候,一定会实例化 BlockManager。 基于应用程序的 AppId 去初始化 BlockManager,这个 initialize 方法也会启动
BlockTransferService 和 ShuffleClient,同时注册 BlockManagerMaster,启动
BlockManagerWorker endpoint,当 Executor 实例化的时候会通过
BlockManager.initialize 来实例化 Executor 上的 BlockManager 并且会创建
BlockManagerSlaveEndpoint 这个消息循环体来接受 Driver 中的 BlockManagerMaster
发过来的指令,例如删除 Block 的指令。 当 BlockManagerSlaveEndpoint 实例化后,Executor 上的
BlockManager 需要向 Driver 上的 BlockManagerMasterEndpoint 注册发送消息到 BlockManagerSlaveEndpoint
BlockManagerMasterEndpoint 接受到 Executor 上的注册信息并进行处理,每一个 BlockManager 都会对应一个 BlockManagerInfo,然后通过 executorId 看看能不能找到
BlockManagerId,BlockManagerMaster 包含了集群中整个 BlockManager
注册的信息。经过了这几个步骤后完成了注册的工作,这跟 Spark-Shell 启动时的日志信息是一致的。BlockManagerMaster 只有一个 dropFromMemory 是指当我们内存不够的话,我们尝试释放一些内存给要使用的应用程序。
BlockManager原理剖析与源码分析
最新推荐文章于 2021-02-05 14:58:43 发布