流程图
1、请求拉起AM容器
RM向NMstartContainers直接拉起AM容器。
NM收到请求,开始校验Container Token及资源文件,创建应用实例和Container实例并存储至本地。
详细在下面链接
https://www.yuque.com/deadwind/notes/yarn-container-lifecycle
* 监控:
RM拉起AM就开始向AMLivelinessMonitor添加监控不会等到AM注册。RMAppAttempt状态 -> LAUNCHED。
2、注册
AM向RM发送远程调用ApplicationMasterProtocol#registerApplicationMaster
传递host、rpc_port、tracking_url到RM.scheduler:8030进行注册。
RM响应RegisterApplicationMasterResponse
response.setMaximumResourceCapability(maxCapability);
response.setApplicationACLs(acls);
response.setClientToAMTokenMasterKey(key);
response.setContainersFromPreviousAttempts(containersFromPreviousAttempt);
response.setNMTokensFromPreviousAttempts(nmTokensFromPreviousAttempts);
response.setQueue(queue);
Client可以通过applicationId向RM请求得到AM的。host,rpcPort,trackingUrl。
3、心跳
注册成功后每隔5秒ApplicationMasterProtocol#allocate
进行一次心跳,AM申请Worker容器也是同一个TCP连接内使用allocate远程方法进行申请。即心跳和申请容器是同一个方法,所以在申请容器时allocate调用间隔会小于5秒,等申请完毕后恢复正常心跳频率。
4、申请容器
Flink内部ResourceManager组件向RM.scheduler:8030请求调用ApplicationMasterProtocol#allocate
分配容器,由于此请求也用于5秒一次心跳,此时allocate调用会极小于5秒一次。RM返回分配的NM主机名、端口、ContainerToken。
0x05 更新容器超时
0x06 完成应用
ApplicationMasterProtocol.finishApplicationMaster
AM向取消注册RMunregisterApplicationMaster
AM所有Container可以被回收。