Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

总览

NodeManager负责启动和管理节点上的容器。容器执行AppMaster指定的任务。

健康检查服务

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

介绍

本文档概述了NodeManager(NM)重新启动,此功能使NodeManager能够重新启动而不会丢失在节点上运行的活动容器。在较高级别上,NM在处理容器管理请求时会将所有必要状态存储到本地状态存储中。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>