阅读 211

NodeManager 生命周期介绍

NodeManager 生命周期介绍

过往记忆 过往记忆大数据
本文原文:https://www.iteblog.com/archives/2169.html,如微信阅读格式错乱,请点击下面 阅读原文 进行阅读。

ResourceManager 内维护了 NodeManager 的生命周期;对于每个 NodeManager 在 ResourceManager 中都有一个 RMNode 与其对应;除了 RMNode ,ResourceManager 中还定义了 NodeManager 的状态(states)以及触发状态转移的事件(event)。具体如下:

  • org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode:这是一个接口,每个 NodeManager 都与 RMNode 对应,这个接口主要维护 NodeManager 的可用资源(主要是内存及CPU)以及其他一些静态信息(比如NodeManager 的ID、hostname、Http端口、健康状况、机架名称等);

  • org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl:这个类实现了 RMNode 接口,其记录了当前 NodeManager 中所有运行的 applications/containers;并且这里面还定义了 NodeManager 的状态转移以及其处理的类。

  • org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeEventType:这是个枚举类,定义了 NodeManager 所有的事件类型。
    org.apache.hadoop.yarn.api.records.NodeState:这也是个枚举类,其定义了 NodeManager 所有可能的状态。
    RMNodeImpl 中定义了 NodeManager 的状态转移情况,如下:

NodeManager 生命周期介绍
上面定义了 NodeManager 每种状态之间的转移及其触发的事件。比如从 NodeState.NEW 状态转移到 NodeState.RUNNIN 的触发事件为 RMNodeEventType.STARTED,其状态转移处理类为 AddNodeTransition 。根据上面的定义我们可以画出 NodeManager 整个生命周期转换图:

NodeManager 生命周期介绍
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
从上图可以看出,NodeManager 生命周期的开始状态和最终状态:

  • 开始状态: NEW

  • 最终状态: DECOMMISSION / REBOOTED / LOST
    所有的 NodeManager 向 ResourceManager 注册的初始化状态都为 NodeState.NEW,一旦向 ResourceManager 注册成功其状态会更新为 NodeState.RUNNIN。还会处理以下两件事:

  • 如果这个 NodeManager 之前在 ResourceManager 中的 inactive 节点列表里面,说明这个节点之前处于 LOST 、REBOOTED、DECOMMISSIONED 或 UNHEALTHY 的状态,但是现在这个节点正常了,所以我们需要把该 NodeManager 从 inactive 节点列表移除,并且更新集群的 Metrics 信息(增加 Active Node 的个数,减少处于 LOST 、REBOOTED、DECOMMISSIONED 或 UNHEALTHY 状态节点的个数);

  • 否则直接更新集群的 Metrics 信息,并增加 Active Node 的个数。
    NodeManager 在启动之后会默认每隔 1s (由 yarn.resourcemanager.nodemanagers.heartbeat-interval-ms 参数配置)向 ResourceManager 发送心跳信息。在 ResourceManager 端会启动 PingChecker 线程默认每隔 200s (yarn.nm.liveness-monitor.expiry-interval-ms 参数值得三分之一)检测所有注册到 ResourceManager 的节点,一旦发现有节点超过 600s (由 yarn.nm.liveness-monitor.expiry-interval-ms 参数配置)没有发送心跳信息,则认为这个节点出问题了,这时候将会把这个节点从 running 列表中移除,并发送 RMNodeEventType.EXPIRE 事件。RMNodeImpl 接收到这个事件会通过 DeactivateNodeTransition 类来处理,这个类会将此节点从 ResourceManager 可用节点列表中移除,并加入到 inactiveNodes 列表里面,此时 NodeManager 状态由 NodeState.RUNNING 或 NodeState.UNHEALTHY 状态转移到 NodeState.LOST 状态,而且该节点被标记为 NodesListManagerEventType.NODE_UNUSABLE。所有在这个节点上运行的 containers 将会标记为失败,并且会分配到新的 NodeManager 上运行。

NodeManager 其他状态之间的转移及其触发的事件这里就不再详细阐述。本博客将会在后文介绍 NodeManager 自身的状况监测机制。

©著作权归作者所有:来自51CTO博客作者mob604756f47778的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐