YARN非常容易扩展:任何新的NodeManager都可以加入配置的ResourceManager中并开始执行作业。但是要获得完全的弹性,我们需要一个退役过程,该过程有助于删除现有节点并缩小集群规模。
YARN节点可以退役NORMAL或GRACEFUL。
YARN节点的正常停用意味着立即关闭。
YARN节点的安全退役是退役NM的机制,同时最大程度地减少了对运行的应用程序的影响。一旦节点进入DECOMMISSIONED状态,RM将不会在其上调度新容器,并且将在将节点转换为DECOMMISSIONED之前等待正在运行的容器和应用程序完成(或直到超过停止使用的超时时间)。
要进行常规退役:
在接下来的部分中,我们将介绍一些更详细的用法(例如:在超时情况下使用平稳停用)。
yarn rmadmin -refreshNodes [-g [以秒为单位的超时] -client | server]通知NodesListManager检测并处理包含和排除主机更改。NodesListManager可以通过yarn-site.xml中的yarn.resourcemanager.nodes.exclude-path配置指定的方式从排除文件加载排除的主机。(注意:在更改排除路径的情况下,不必重新启动RM,因为将为每个refreshNodes命令再次读取此配置)
文件的格式可以是纯文本或XML,具体取决于文件的扩展名。仅XML格式支持每个节点的定时淘汰,以实现正常停用。
NodesListManager检查并比较资源管理器和排除列表中RMNode的状态,并根据以下规则应用必要的操作:
因此,RECOMMISSION,GRACEFUL_DECOMMISSION或DECOMMISSION RMNodeEvent将被发送到RMNode。
为了支持通过单个或多个refreshNodes请求使用不同超时灵活地优雅地停用节点,HostsFileReader在排除主机文件中的每个主机名(或ip)之后均支持可选的超时值。
用于特定主机的有效退役超时基于以下优先级:
如果服务器端超时:
如果发生客户端超时(请参见以下信息):
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更改此行为)。
收到GRACEFUL_DECOMMISSION事件后,RMNode将保存退役超时(如果已指定),更新度量标准以进行正常退役并保留其原始总容量,并转换为DECOMMISSIONING状态。
资源将在DECOMMISSIONING RMNode上动态且定期地更新,因此由于没有可用资源,调度程序不会在其上调度新容器。
DecommissioningNodeWatcher是YARN组件,它在客户端/管理员提出正常的停用请求后自动并异步跟踪DECOMMISSIONING节点的状态。NM会定期向其发送RM心跳以及最新的容器状态。DecommissioningNodeWatcher跟踪所有DECOMMISSIONING节点上的心跳更新,以决定节点上所有正在运行的容器完成之后何时转换为DECOMMISSIONED状态,然后通知NodeManager关闭。
在MR应用程序下,一个节点在完成其所有容器之后,仍可以在应用程序使用期间为还原器映射输出数据。YARN正常停用机制将保留此类DECOMMISSIONING节点,直到所有涉及的应用程序完成为止。但是,在长期运行的应用程序场景中,一堆“空闲”节点可能会停留很长一段时间,这可能是不可取的。DecommissioningNodeWatcher可以用超时来平衡这种担忧-无论正在运行的容器或应用程序如何,都将在不迟于停用超时的情况下停用DECOMMISSIONING节点。如果运行中的容器较早完成,它将继续等待应用程序完成,直到退役超时为止。当退役超时达到时,无论如何该节点都将退役。
定期(每20秒)将所有停用节点的状态记录在资源管理器日志中。以下是停用节点的子状态:
属性 | 值 |
---|---|
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 | 包含节点的文件路径。 |