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 每种状态之间的转移及其触发的事件。比如从 NodeState.NEW 状态转移到 NodeState.RUNNIN 的触发事件为 RMNodeEventType.STARTED,其状态转移处理类为 AddNodeTransition 。根据上面的定义我们可以画出 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的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. VARCHART XGantt甘特图如何Drag & Drop
  2. NodeManager节点自身健康状态检测机制
  3. MySql引擎原理以及优化
  4. SumSwap独特的staking机制为何如此受欢迎?
  5. Solr7.3 Cloud On HDFS搭建
  6. Prometheus 之 Kubernetes节点的监控
  7. Apache Flink状态管理和容错机制介绍
  8. 记录一次生产上暴力解决HBase RIT问题
  9. SumSwap节点预售开启,新的DEX挑战者即将踏上征程

随机推荐

  1. 在服务中设置服务重复时间
  2. weiyi通讯录(三)仿微信下拉列表和android样
  3. Android输入系统之InputChannel(上)
  4. Android程序报R cannot be resolved to a
  5. Android 平台实现按指定平率和时长发声(
  6. android源生Browser分析(四)---Webkit部分
  7. 如何在Nokia-x中获得广告ID ?
  8. 在活动中管理多个asynctask什么显示数据(S
  9. 如何在函数中将两个参数从1个类传递给另
  10. kotlin-stdlib-jre7已弃用。请改用kotlin