概述

每个协议的Server端都有一个Service类与之对应,用来处理请求。

主要四大协议

ApplicationClientProtocol对应ClientRMService(Client向RM);
ApplicationMasterProtocol对应ApplicationMasterService(AM向RM);
ContainerManagementProtocol对应ContainerManager下的RPC Server(AM和RM向NM);
ResourceTracker对应ResourceTrackerService(NM向RM

RM相关协议图

image.png

NM相关协议图

image.png

ApplicationClientProtocol

客户端同ResourceManager之间的通信:提交,退出作业,获取作业信息,集群指标,队列信息,安全访问控制等

ApplicationMasterProtocol

ApplicationMaster 同 ResourceManager 之间的通信:AM是Client,RM是Server。

请求:主要是am向rm注册,退出。内置的allocate()函数提供把NM加入黑名单功能,如果发现NM总是失败,用户可以自定义加入黑名单。RM就不会给AM分配这台机器的Container了。

响应:AMCommand字段可以重启和关闭AM。PreemptionMessage抢占字段可以让AM释放Container,如果一段时间不释放就强制回收。里面分StrictPreemptionContract、PreemptionContract。前者严格释放,必须释放对应Container,后者包含资源总量和ContainerID,AM可以释放等值的其他Container,或者严格按照要求释放指定Container。

finishApplicaitonMaster

通知RM应用结束,回收所有容器。从AMLivelinessMonitor监控列表移除监控。

ContainerManagementProtocol(AM和RM向NM)

ApplicationMaster 和 NodeManager 之间的通信:启动停止Container、增加资源、获取状态
startContainer、stopContainer、getContainerStatus、increaseContainersResource。

ResourceTracker(NM向RM)

请求分两种注册和心跳。
注册请求包含:节点ID、可用资源上限等。registerNodeManager
请求参数主要包括:httpPort、NodeId(里面有主机和RPC端口)、Resource(总资源)。
//TODO 安全机制 MasterKey需要探索
响应参数主要包括:MasterKey、NodeAction、rmIdentifier、diagnosticsMessage(注册失败诊断信息,具体失败原因等)
心跳请求nodeHeartbeat包含:容器状态、Application列表、节点健康状况等,RM会响应命令,如杀死一个容器。

向ResourceManager注册,退出,心跳等信息。NM是Client,RM是Server。采用“Pull模式”NM周期性向RM发送请求,领取RM下达的指令。

其他

ResourceManagerAdministrationProtocol

Client请求RM请求,对应AdminService服务。

LocalizationProtocol

ContainerLocalizer 进程向 NM 报告资源下载进度。