1、 和其他模块之间的交互接口分析
1)作为client,NodeStatusUpdater通过ResourceTracker协议和RM进行交互。
该API有两个方法
向RM注册NodeManager,参数为httpPort、nodeId、totalResource,其中totalResource为节点的总可分配资源,包括CPU、内存。
向RM心跳,NM启动后通过定期的向RM汇报Container情况,比如处于launched container、已经完成的container、节点的健康信息,并返回领取命令,如kill container。
2)作为服务端,提供ContainerManager服务,通过ContainerManagementProtocol协议为AM提供服务。
该API提供了3个方法
启动containers,参数为StartContainersRequest,也即是StartContainerRequest列表,每个对象是包括启动Container所需要的资源(localResources)、环境变量(environment )、命令(commands)、Token等。
停止containers,参数为StopContainerResult,指定kill的containerId。
获取container状态,参数为GetContainerStatusRequest,指定目标containerId。
2、 几个主要功能类介绍
1)NodeStatusUpdater:周期性的向RM汇报container的状态,包括launched containers、finished containers,返回待clean的Container列表,待clean的Application列表等。
2)ApplicationImpl:NM的应用的状态机宿主对象,管理NM上的该application的所有container;维护一个状态机,记录app的状态之间的迁移和事件,以及事件动作。
3)ContainerImpl:NM的Container的状态机宿主对象,激励container各个状态之间的迁移和事件,以及事件的动作。
4)ContainerManager:提供了RPC服务,启动containers、停止containers、获取container的状态信息;这个类是container管理的启动类。
5)LogHandler:Container的运行日志服务,可以