增加ContainerManager
This commit is contained in:
parent
c9a5063b58
commit
92378a2d28
@ -92,3 +92,52 @@ app.handle(new ApplicationContainerInitEvent(container));
|
||||
此状态会重新拉起所有的Container。
|
||||
|
||||
|
||||
# 启动Containers
|
||||
|
||||
## 获取NMToken
|
||||
|
||||
在Container启动之前需要获取NMToken,可以通过下面命令获取,一般情况下获取第一个NMTokenIdentifier类型的Token。
|
||||
|
||||
```java
|
||||
Set<TokenIdentifier> tokenIdentifiers = remoteUgi.getTokenIdentifiers();
|
||||
```
|
||||
|
||||
## 开始启动Container
|
||||
|
||||
启动之前需要做的就是初始化ContainerImpl信息,方便后续启动Container。
|
||||
|
||||
```java
|
||||
Container container =
|
||||
new ContainerImpl(getConfig(), this.dispatcher,
|
||||
launchContext, credentials, metrics, containerTokenIdentifier,
|
||||
context, containerStartTime);
|
||||
|
||||
```
|
||||
|
||||
如果是第一次启动(满足条件:`!context.getApplications().containsKey(applicationID))`,也就是AM,会通过下面命令触发作业的启动:
|
||||
|
||||
```java
|
||||
context.getNMStateStore().storeApplication(applicationID,
|
||||
buildAppProto(applicationID, user, credentials, appAcls,
|
||||
logAggregationContext, flowContext));
|
||||
dispatcher.getEventHandler().handle(new ApplicationInitEvent(
|
||||
applicationID, appAcls, logAggregationContext));
|
||||
```
|
||||
|
||||
满足下面条件则是恢复Application:
|
||||
|
||||
`containerTokenIdentifier.getContainerType() == ContainerType.APPLICATION_MASTER && context.getApplications().containsKey(applicationID))`
|
||||
|
||||
启动Container主要是触发Container的Init事件:
|
||||
|
||||
```java
|
||||
this.context.getNMStateStore().storeContainer(containerId,
|
||||
containerTokenIdentifier.getVersion(), containerStartTime, request);
|
||||
dispatcher.getEventHandler().handle(
|
||||
new ApplicationContainerInitEvent(container));
|
||||
```
|
||||
|
||||
## Container事件处理
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user