Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

总览

YARN非常容易扩展:任何新的NodeManager都可以加入配置的ResourceManager中并开始执行作业。但是要获得完全的弹性,我们需要一个退役过程,该过程有助于删除现有节点并缩小集群规模。

YARN节点可以退役NORMAL或GRACEFUL。

YARN节点的正常停用意味着立即关闭。

YARN节点的安全退役是退役NM的机制,同时最大程度地减少了对运行的应用程序的影响。一旦节点进入DECOMMISSIONED状态,RM将不会在其上调度新容器,并且将在将节点转换为DECOMMISSIONED之前等待正在运行的容器和应用程序完成(或直到超过停止使用的超时时间)。

快速开始

要进行常规退役:

  1. 启动YARN群集(使用NodeManageres和ResourceManager)
  2. 开始纱线工作(例如使用纱嘴...
  3. yarn.resourcemanager.nodes.exclude-path属性添加到yarn-site.xml中(注意:您无需重新启动ResourceManager)
  4. 创建一个文本文件(位置在上一步中定义),其中一行包含所选NodeManager的名称。
  5. 调用./bin/yarn rmadmin -refreshNodes
  6. 结果:nodemanager 立即停用

在接下来的部分中,我们将介绍一些更详细的用法(例如:在超时情况下使用平稳停用)。

特征

根据排除/包含列表触发停用/重新启用

yarn rmadmin -refreshNodes [-g [以秒为单位的超时] -client | server]通知NodesListManager检测并处理包含和排除主机更改。NodesListManager可以通过yarn-site.xml中的yarn.resourcemanager.nodes.exclude-path配置指定的方式从排除文件加载排除的主机。(注意:在更改排除路径的情况下,不必重新启动RM,因为将为每个refreshNodes命令再次读取此配置)

文件的格式可以是纯文本或XML,具体取决于文件的扩展名。仅XML格式支持每个节点的定时淘汰,以实现正常停用。

NodesListManager检查并比较资源管理器和排除列表中RMNode的状态,并根据以下规则应用必要的操作:

  • 重新授权不再被排除的DECOMMISSIONED或DECOMMISSIONING节点;
  • 优雅地停用尚未处于DECOMMISSIONED或DECOMMISSIONING状态的排除的节点;
  • 如果未指定-g标志,则立即停用尚未处于DECOMMISSIONED状态的排除的节点。

因此,RECOMMISSION,GRACEFUL_DECOMMISSION或DECOMMISSION RMNodeEvent将被发送到RMNode。

每节点退役超时支持

为了支持通过单个或多个refreshNodes请求使用不同超时灵活地优雅地停用节点,HostsFileReader在排除主机文件中的每个主机名(或ip)之后均支持可选的超时值。

用于特定主机的有效退役超时基于以下优先级:

如果服务器端超时:

  1. 如果在排除主机文件中指定了超时,则对特定主机使用超时;
  2. 如果指定,则在yarn rmadmin -refreshNodes -g [以秒为单位的超时] -server | client中使用超时;
  3. 使用通过“ yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs”配置指定的默认超时。

如果发生客户端超时(请参见以下信息):

  1. 仅使用-g标志定义的命令行参数。

NodesListManager决定要使用的有效超时,并在各个RMNode上进行设置。还可以通过yarn rmadmin -refreshNodes -g [以秒为单位的超时]命令来动态调整超时。NodesListManager将解析要使用的有效超时,并根据需要更新新超时的RMNode。更改超时不会重置正在进行的停用,而只会影响对节点是否已达到停用超时的评估。

以下是xml格式的排除文件示例。

<?xml version =“ 1.0”?>
<主机>
  <主机> <名称>主机1 </名称> </主机>
  <host> <name> host2 </ name> <timeout> 123 </ timeout> </ host>
  <host> <name> host3 </ name> <timeout> -1 </ timeout> </ host>
  <主机> <名称>主机4,主机5,主机6 </名称> <超时> 1800 </超时> </主机>
</ hosts>

如果排除文件的文件扩展名不是xml,则使用标准的每主机一行(1行)格式,而不支持超时。

主机1
主机2
主机3

注意:将来计划支持超时的更多文件格式。如果您有兴趣,请遵循YARN-5536

值得一提的是,超时不是永久的。在RM重新启动/故障转移的情况下,该节点将立即停用。(遵循YARN-5464更改此行为)。

客户端或服务器端超时

可以在服务器或客户端上跟踪正常停用的超时。该-client |服务器指示是否超时跟踪均应由客户或ResourceManager的处理。客户端跟踪被阻止,而服务器端跟踪未被阻止。

RMNode处理停用事件

收到GRACEFUL_DECOMMISSION事件后,RMNode将保存退役超时(如果已指定),更新度量标准以进行正常退役并保留其原始总容量,并转换为DECOMMISSIONING状态。

资源将在DECOMMISSIONING RMNode上动态且定期地更新,因此由于没有可用资源,调度程序不会在其上调度新容器。

自动和异步跟踪停用节点的状态

DecommissioningNodeWatcher是YARN组件,它在客户端/管理员提出正常的停用请求后自动并异步跟踪DECOMMISSIONING节点的状态。NM会定期向其发送RM心跳以及最新的容器状态。DecommissioningNodeWatcher跟踪所有DECOMMISSIONING节点上的心跳更新,以决定节点上所有正在运行的容器完成之后何时转换为DECOMMISSIONED状态,然后通知NodeManager关闭。

在MR应用程序下,一个节点在完成其所有容器之后,仍可以在应用程序使用期间为还原器映射输出数据。YARN正常停用机制将保留此类DECOMMISSIONING节点,直到所有涉及的应用程序完成为止。但是,在长期运行的应用程序场景中,一堆“空闲”节点可能会停留很长一段时间,这可能是不可取的。DecommissioningNodeWatcher可以用超时来平衡这种担忧-无论正在运行的容器或应用程序如何,都将在不迟于停用超时的情况下停用DECOMMISSIONING节点。如果运行中的容器较早完成,它将继续等待应用程序完成,直到退役超时为止。当退役超时达到时,无论如何该节点都将退役。

定期(每20秒)将所有停用节点的状态记录在资源管理器日志中。以下是停用节点的子状态:

  • NONE —节点未处于DECOMMISSIONING状态。
  • WAIT_CONTAINER —等待正在运行的容器完成。
  • WAIT_APP —等待正在运行的应用程序完成(在所有容器完成之后)
  • 超时—等待容器或应用程序完成的超时
  • 准备就绪-无需等待,准备退役
  • 退役—该节点已经退役

组态

属性
yarn.resourcemanager.nodemanager-优雅退役超时秒 YARN节点正常停用的超时时间(以秒为单位)。这是在将DECOMMISSIONING节点转换为DECOMMISSIONED之前等待正在运行的容器和应用程序完成的最长时间。默认值为3600秒。负值(如-1)被视为无限超时。
yarn.resourcemanager.decommissioning-nodes-watcher.poll-interval-secs DecommissioningNodesWatcher中的轮询计时器任务的秒数(以秒为单位),用于识别和处理缺少常规心跳的DECOMMISSIONING节点。默认值为20秒。
yarn.resourcemanager.nodes.exclude-path 包含要排除的节点的文件路径。
yarn.resourcemanager.nodes.include-path 包含节点的文件路径。