ContainerManagementProtocolProxy:
{
private final Map<String, ContainerManagementProtocolProxyData> cmProxy;
private final YarnRPC rpc;
}
ContainerManagementProtocolProxyData:
{
private final ContainerManagementProtocol proxy;
}
ContainerManagementProtocol和ApplicationMasterProtocol在使用上是有点区别的:
AMRMClienImpl.java 中是直接定义的protected ApplicationMasterProtocol rmClient;
而NMClienImpl.java 是定义 private ContainerManagementProtocolProxy cmProxy;
ContainerManagementProtocolProxy的定义在上面已经说明了。
为什么要在ContainerManagementProtocolProxy中定义YarnRPC,笔者认为这是为了以后的扩展。为什么这么说呢,YarnRPC是用开开启服务的,YarnRPC.getServer().start(),所以可能是以后NodeManage也需要主动与ApplicationMaster 进行交互。而并非只是ApplicationMaster 主动与NodeManage交互,也就是NodeManage也需要ApplicatonMaster的某种服务。