修改Container停止

This commit is contained in:
LingZhaoHui 2024-08-07 00:30:33 +08:00
parent 5864f8e8e8
commit 09a99307bf
Signed by: zeekling
GPG Key ID: D96E4E75267CA2CC
2 changed files with 28 additions and 2 deletions

View File

@ -32,7 +32,7 @@ mvn -T 8 package -Pdist,native -DskipTests -Dmaven.javadoc.skip=true
- [ResourceManager详解](./yarn/resourcemanager.md) - [ResourceManager详解](./yarn/resourcemanager.md)
- [作业启动](./yarn/job_start.md) - [作业启动](./yarn/job_start.md)
- Yarn NodeManager相关 - Yarn NodeManager相关
- [NodeManager 详解](./yarn/containerManager.md) - [containerManager 详解](./yarn/containerManager.md)
- Yarn 事件相关 - Yarn 事件相关
- [Yarn状态机](./yarn/yarn_event.md) - [Yarn状态机](./yarn/yarn_event.md)

View File

@ -137,7 +137,33 @@ dispatcher.getEventHandler().handle(
new ApplicationContainerInitEvent(container)); new ApplicationContainerInitEvent(container));
``` ```
## Container事件处理 # 停止Container
## 获取NMToken
在Container停止之前需要获取NMToken,可以通过下面命令获取一般情况下获取第一个NMTokenIdentifier类型的Token。和启动时候的类似。
```java
Set<TokenIdentifier> tokenIdentifiers = remoteUgi.getTokenIdentifiers();
```
## 停止作业
停止作业的时候会优先通过`context.getContainers().get(containerID)`获取Container信息。
如下场景会抛出异常:
- 对于查询不到的Container如果不是最新停止的则会抛出异常。
- 对于正在恢复的Container不会接受停止会抛出异常。
停止作业的核心逻辑如下,核心思想是触发KILL事件。具体可以参见[Container事件处理](#Container事件处理)
```java
context.getNMStateStore().storeContainerKilled(containerID);
container.sendKillEvent(ContainerExitStatus.KILLED_BY_APPMASTER,
"Container killed by the ApplicationMaster.");
```
# Container事件处理
Container启动的开始是从事件InitContainerTransition。由当前事件通过状态机转到其他状态。 Container启动的开始是从事件InitContainerTransition。由当前事件通过状态机转到其他状态。