Yarn中RPC通信框架如下图所示:
1.ApplicationClientProtocol
应用程序的客户端通过该接口向 ResourceManager 提交应用程序、查询应用程序状态和控制应用程序(比如杀死应用程序)等。
在接口中,应用工程序客户端扮演 RPC Client 的角色,而 ResourceManager 扮演 RPC Server 的角色。
2.ApplicationMasterProtocol
应用程序的 ApplicationMaster 通过该接口向 ResourceManager 注册、申请资源和释放资源。
在该协议中, ApplicationMaster 扮演 RPC Client 的角色,而 ResourceManager 扮演 RPC Server 的角色。
3.ResourceTracker
NodeManager 通过ResourceTracker接口主动向 ResourceManager 注册、汇报节点健康状况和 Container 运行状态。同时,接收 响应中ResourceManager下发的指令,包括重新初始化、清理 Container 等。
这个接口中,ResourceManager 扮演 RPC Server 的角色(由内部组件ResourceTrackerService 实现), NodeManager 扮演 RPC Client 的角色。
NodeManager 总是周期性地主动向 ResourceManager 发起请求,并接收下达给自己的命令。
4.ContainerManagementProtocol
应用程序的 ApplicationMaster 通过该接口向 NodeManager 发起针对 Container 的相关操作,包括启动 Container、杀死 Container、获取 Container 执行状态等。
在该协议中,ApplicationMaster 扮演 RPC Client 的角色,而 NodeManager 扮演 RPC Server 的角色(由内部组件 ContainerManager 实现)。
NodeManager 与 ApplicationMaster 之间采用了 "push模型",ApplicationMaster 可以将 Container 相关操作第一时间告诉 NodeManager,相比于 "pull模型",可大大降低时间延迟。