流程图

image.png
image.png

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

  1. response.setMaximumResourceCapability(maxCapability);
  2. response.setApplicationACLs(acls);
  3. response.setClientToAMTokenMasterKey(key);
  4. response.setContainersFromPreviousAttempts(containersFromPreviousAttempt);
  5. response.setNMTokensFromPreviousAttempts(nmTokensFromPreviousAttempts);
  6. 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向取消注册RM
unregisterApplicationMaster
AM所有Container可以被回收。

0x07 删除监控