NodeManager运行服务以确定在其上执行的节点的运行状况。该服务在磁盘上执行检查以及任何用户指定的测试。如果任何运行状况检查失败,则NodeManager会将节点标记为运行状况不佳,并将其传达给ResourceManager,然后ResourceManager停止为该节点分配容器。节点状态的通信是NodeManager和ResourceManager之间心跳的一部分。磁盘检查器和运行状况监视器(如下所述)运行的间隔不影响心跳间隔。心跳发生时,两种检查的状态都用于确定节点的运行状况。
磁盘检查器检查NodeManager配置为使用的磁盘的状态(本地目录和日志目录,分别使用yarn.nodemanager.local-dirs和yarn.nodemanager.log-dirs配置)。检查包括权限和可用磁盘空间。它还会检查文件系统是否处于只读状态。默认情况下,检查每隔2分钟运行一次,但可以将其配置为根据用户需要的频率运行。如果磁盘检查失败,则NodeManager会停止使用该特定磁盘,但仍将节点状态报告为运行状况良好。但是,如果许多磁盘未通过检查(可以配置该数目,如下所述),则该节点将被报告为运行状况不正常,并且ResourceManager不会将新容器分配给该节点。
以下配置参数可用于修改磁盘检查:
配置名称 | 允许值 | 描述 |
---|---|---|
yarn.nodemanager.disk-health-checker.enable | 真假 | 启用或禁用磁盘运行状况检查器服务 |
yarn.nodemanager.disk-health-checker.interval-ms | 正整数 | 磁盘检查器应运行的时间间隔(以毫秒为单位);默认值为2分钟 |
yarn.nodemanager.disk-health-checker.min-healthy-disks | 在0-1之间浮动 | 必须通过检查以使NodeManager将节点标记为正常的磁盘的最小比例;默认值为0.25 |
yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage | 在0-100之间浮动 | 在磁盘检查器服务将磁盘标记为不正常之前,可以利用的最大磁盘空间百分比。将为NodeManager使用的每个磁盘运行此检查。默认值为90,即可以使用磁盘的90%。 |
yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb | 整数 | 磁盘上可用的最小可用空间量,磁盘检查器服务才能将磁盘标记为正常。将为NodeManager使用的每个磁盘运行此检查。默认值为0,即可以使用整个磁盘。 |
用户可以指定自己的运行状况检查器脚本,该脚本将由运行状况检查器服务调用。用户可以指定超时以及要传递给脚本的选项。如果脚本以非零的退出代码退出,超时或引发异常,则将该节点标记为不正常。请注意,如果脚本由于权限或路径错误等原因而无法执行,则视为失败,并且该节点将被报告为不正常。请注意,指定运行状况检查脚本不是强制性的。如果未指定脚本,则仅使用磁盘检查器状态来确定节点的运行状况。
以下配置参数可用于设置运行状况脚本:
配置名称 | 允许值 | 描述 |
---|---|---|
yarn.nodemanager.health-checker.interval-ms | 正整数 | 运行状况检查程序服务的时间间隔(以毫秒为单位);默认值为10分钟。 |
yarn.nodemanager.health-checker.script.timeout-ms | 正整数 | 运行状况脚本的超时;默认值为20分钟。 |
yarn.nodemanager.health-checker.script.path | 串 | 运行状况检查脚本的绝对路径。 |
yarn.nodemanager.health-checker.script.opts | 串 | 执行脚本时要传递给脚本的参数。 |
本文档概述了NodeManager(NM)重新启动,此功能使NodeManager能够重新启动而不会丢失在节点上运行的活动容器。在较高级别上,NM在处理容器管理请求时会将所有必要状态存储到本地状态存储中。NM重新启动时,它将通过以下方式恢复:首先加载各种子系统的状态,然后让这些子系统使用已加载状态执行恢复。
步骤1.要启用NM Restart功能,请将conf / yarn-site.xml中的以下属性设置为true。
属性 | 值 |
---|---|
yarn.nodemanager.recovery.enabled | true,(默认值设置为false) |
步骤2.配置本地文件系统目录的路径,NodeManager可以在其中保存其运行状态。
属性 | 描述 |
---|---|
yarn.nodemanager.recovery.dir | 启用恢复后,节点管理器将在其中存储状态的本地文件系统目录。默认值设置为$ hadoop.tmp.dir / yarn-nm-recovery。 |
步骤3:在恢复状态下启用NM监视,以防止在NM退出时清理正在运行的容器。
属性 | 描述 |
---|---|
纱线,节点管理器,回收监督 | 如果启用,则运行的NodeManager会在退出时不会尝试清理容器,并假设它将立即重新启动并恢复容器。默认值设置为'false'。 |
步骤4.为NodeManager配置有效的RPC地址。
属性 | 描述 |
---|---|
yarn.nodemanager.address | 临时端口(默认为端口0)不能用于通过yarn.nodemanager.address指定的NodeManager的RPC服务器,因为它可以使NM在重启前后使用不同的端口。这将破坏重新启动之前与NM通信的所有先前运行的客户端。明确将yarn.nodemanager.address设置为具有特定端口号的地址(例如0.0.0.0:45454)是启用NM重新启动的前提条件。 |
步骤5.辅助服务。
可以将YARN群集中的NodeManager配置为运行辅助服务。对于完全正常运行的NM重新启动,YARN依赖于配置为也支持恢复的任何辅助服务。这通常包括(1)避免使用临时端口,以便先前运行的客户端(在这种情况下,通常是容器)在重新启动后不会受到干扰;(2)通过在NodeManager重新启动并重新初始化时重新加载任何先前状态,使辅助服务本身支持可恢复性。辅助服务。
上面的一个简单示例是MapReduce(MR)的辅助服务“ ShuffleHandler”。ShuffleHandler已经满足了以上两个要求,因此用户/管理员无需执行任何操作即可支持NM重新启动:(1)配置属性mapreduce.shuffle.port控制NodeManager主机上ShuffleHandler绑定到的端口,以及它默认为非临时端口。(2)NM重新启动后,ShuffleHandler服务还已经支持恢复以前的状态。
要在NodeManager上启动辅助服务,用户必须将其jar直接添加到NodeManager的类路径中,从而将其放在系统类加载器上。但是,如果插件路径上存在多个版本的插件,则无法控制实际加载哪个版本。或者,如果辅助服务引入的依赖项与NodeManager本身之间存在任何冲突,则它们可能会破坏NodeManager,辅助服务或同时破坏两者。为了解决此问题,我们可以使用不同于系统类加载器的类加载器实例化辅助服务。
本节描述用于辅助服务类路径隔离的配置变量。
需要在yarn-site.xml中设置以下设置。
配置名称 | 描述 |
---|---|
yarn.nodemanager.aux-services。%s.classpath | 提供本地目录,其中包括相关的jar文件以及所有依赖项的jar文件。我们可以指定单个jar文件,也可以使用$ {local_dir_to_jar} / *将所有jar加载到dep目录下。 |
yarn.nodemanager.aux-services。%s.remote-classpath | 提供jar文件的远程绝对或相对路径(我们还支持zip,tar.gz,tgz,tar和gz文件)。对于相同的辅助服务类,我们只能指定以下配置之一:yarn.nodemanager.aux-services。%s.classpath或yarn.nodemanager.aux-services。%s.remote-classpath。将引发YarnRuntimeException。还请确保jar文件的所有者必须与NodeManager用户相同,并且永久对象应满足(permbits&0022)== 0(例如600,不能按组或其他方式写入)。 |
yarn.nodemanager.aux-services。%s.system-classes | 通常,我们不需要设置此配置。如果该类不属于系统类,则将从定制的类路径中加载该类。例如,默认情况下,软件包org.apache.hadoop在系统类中,如果您的类CustomAuxService在软件包org.apache.hadoop中,则不会从定制的类路径中加载它。为了解决这个问题,我们可以更改CustomAuxService的程序包,或者配置我们自己的系统类(不包括org.apache.hadoop)。 |
<属性> <name> yarn.nodemanager.aux-services </ name> <value> mapreduce_shuffle,CustomAuxService </ value> </ property> <属性> <name> yarn.nodemanager.aux-services.CustomAuxService.classpath </ name> <value> $ {local_dir_to_jar} /CustomAuxService.jar </ value> </ property> <!- <属性> <name> yarn.nodemanager.aux-services.CustomAuxService.remote-classpath </ name> <value> $ {remote-dir_to_jar} /CustomAuxService.jar </ value> </ property> -> <属性> <name> yarn.nodemanager.aux-services.CustomAuxService.class </ name> <value> org.aux.CustomAuxService </ value> </ property> <属性> <name> yarn.nodemanager.aux-services.mapreduce_shuffle.class </ name> <value> org.apache.hadoop.mapred.ShuffleHandler </ value> </ property>