简介
BlockManagerMaster负责对Executor上的BlockManager的管理和协调,具体操作依赖于BlockManagerMasterEndpoint。Driver上的BlockManagerMaster对存在于Executor上的BlockManager统一管理,比如Executor需要向Driver发送注册BlockManager、更新Executor上Block的最新信息、询问所需要Block目前所在的位置以及当Executor运行结束需要将此Executor移除等。所有Executor与Driver关于BlockManager的交互都依赖于它。而BlockManager只是负责管理所在Executor上的Block。
创建
BlockManagerMaster是在SparkEnv中创建的,Drive和Executor处理BlockManagerMaster的方式不同:构造blockManagerMaster的时候在Driver端是创建了一个BlockManagerMasterEndpoint并注册到了rpcEnv中,而在executor端是获取到了Driver端BlockManagerMasterEndpoint的引用BlockManagerMasterRef,以便后面的通信。随后Executor创建了自己blockManager的时候创建了BlockManagerSlaveEndpoint。
def registerOrLookupEndpoint(
name: String, endpointCreator: => RpcEndpoint):
RpcEndpointRef = {
if (isDriver) {
logInfo("Registering " + name)
rpcEnv.setupEndpoint(name, endpointCreator)
} else {