ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【深入浅出 Yarn 架构与实现】6-2 NodeManager 状态机管理 [打印本页]

作者: 一给    时间: 2023-4-4 14:37
标题: 【深入浅出 Yarn 架构与实现】6-2 NodeManager 状态机管理
一、简介

NodeManager(NM)中的状态机分为三类:Application、Container 和 LocalizedResource,它们均直接或者间接参与维护一个应用程序的生命周期。
二、三类状态机

一)Application 状态机

NM 上的 Application 维护的信息是 RM 端 Application 信息的一个子集,这有助于统一管理节点上同一个 Application 的所有 Container(例如记录每个 Application 在该节点上运行的 Container 列表,以及杀死一个 Application 的所有 Container 等)。
实现这一功能的类是 nodemanager/containermanager/application/ApplicationImpl,它维护了一个 Application 状态机。需要注意的是,NM 上 Application 的生命周期与 RM 上 Application 的生命周期是一致的。
  1. // 截取 ApplicationImpl 中一部分状态机的代码
  2.   private static StateMachineFactory<ApplicationImpl, ApplicationState,
  3.           ApplicationEventType, ApplicationEvent> stateMachineFactory =
  4.       new StateMachineFactory<ApplicationImpl, ApplicationState,
  5.           ApplicationEventType, ApplicationEvent>(ApplicationState.NEW)
  6.            // Transitions from NEW state
  7.            .addTransition(ApplicationState.NEW, ApplicationState.INITING,
  8.                ApplicationEventType.INIT_APPLICATION, new AppInitTransition())
  9.            .addTransition(ApplicationState.NEW, ApplicationState.NEW,
  10.                ApplicationEventType.INIT_CONTAINER,
  11.                INIT_CONTAINER_TRANSITION)
  12.            // Transitions from INITING state
  13.            .addTransition(ApplicationState.INITING, ApplicationState.INITING,
  14.                ApplicationEventType.INIT_CONTAINER,
  15.                INIT_CONTAINER_TRANSITION)
  16.            .addTransition(ApplicationState.INITING,
  17.                EnumSet.of(ApplicationState.FINISHING_CONTAINERS_WAIT,
  18.                    ApplicationState.APPLICATION_RESOURCES_CLEANINGUP),
  19.                ApplicationEventType.FINISH_APPLICATION,
  20.                new AppFinishTriggeredTransition())
  21.            .addTransition(ApplicationState.INITING, ApplicationState.INITING,
  22.                ApplicationEventType.APPLICATION_CONTAINER_FINISHED,
  23.                CONTAINER_DONE_TRANSITION)
  24.            .addTransition(ApplicationState.INITING, ApplicationState.INITING,
  25.                ApplicationEventType.APPLICATION_LOG_HANDLING_INITED,
  26.                new AppLogInitDoneTransition())
  27.            .addTransition(ApplicationState.INITING, ApplicationState.INITING,
  28.                ApplicationEventType.APPLICATION_LOG_HANDLING_FAILED,
  29.                new AppLogInitFailTransition())
  30.            .addTransition(ApplicationState.INITING, ApplicationState.RUNNING,
  31.                ApplicationEventType.APPLICATION_INITED,
  32.                new AppInitDoneTransition())
复制代码

下面进行具体介绍:
1、基本状态

2、基本事件

二)Container 状态机

Container 状态机维护一个 container 运行的全部状态,包含 11 个状态和 10 个事件,实现类是 nodemanager/containermanager/container/ContainerImpl.java。下面是状态转化的图:

1、基本状态

2、基本事件

三)LocalizedResource 状态机

下载是在从 init 状态转移到 downloading 状态时,会发一个 REQUEST_RESOURCE_LOCALIZATION 事件。这个事件是会发给 ResourceLocalizationService,ResourceLocalizationService 根据资源的类型和可见性确定路径并下载他。下载是异步的(并且每个 application 对应着自己的下载线程),每个下载会对应一个 callable 的 FSDownload。
状态机如下图所示,非常简单,不再具体介绍。

三、小结

本篇文章对 NodeManager 中三类状态机进行了介绍,其主要都是维护一个应用程序的生命周期。无需强行记忆,知道有这三类状态机,遇到问题再对应查看即可。
参考文章:
《Hadoop技术内幕:深入解析YARN架构设计与实现原理》

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4