修改Container停止
This commit is contained in:
parent
5864f8e8e8
commit
09a99307bf
@ -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)
|
||||||
|
@ -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。由当前事件通过状态机转到其他状态。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user