YARN高可用特性使用指南

本文介绍YARN高可用特性以及相关配置项。

基本介绍

Hadoop YARN是基于Master与Slave主从架构的分布式集群资源管理系统,其中RM (ResourceManager) 是Master组件,负责整个集群的资源管理与任务调度,NM (NodeManager) 是Slave组件,负责单个节点的任务管理与监控。

YARN高可用特性主要包括以下三个方面:

  • RM HA(ResourceManager High Availability)能够支持在不同节点上启动多个ResourceManager进程,可以避免单点故障。更多内容,请参见ResourceManager High Availability

  • RM有状态重启(ResourceManager Restart)能够持续将应用信息与当前状态实时同步至Zookeeper分布式存储中,并在启动时重新加载应用状态,保证集群升级或重启后应用可以自动恢复。更多内容,请参见ResourceManager Restart

  • NM有状态重启(NodeManager Restart)能持续将运行时的任务(Container)信息与状态同步至LevelDB等本地存储中,并在启动时重新加载任务状态,保证运行中任务在节点升级或重启时不受影响。更多内容,请参见NodeManager Restart

基于以上特性,在通常情况下,对于RM单点故障、RM升级或重启、NM升级或重启等常见场景,可以做到应用无感知,任务运行时不受任何影响。

依赖服务

YARN高可用特性依赖ZooKeeper服务实现分布式选举与应用信息和状态元数据的存储,保证集群的强一致性。依赖的ZooKeeper服务配置项如下表。

配置集

配置项

(推荐)配置值

说明

core-site.xml

hadoop.zk.address

<zk1-host>:<zk1-port>,<zk2-host>:<zk2-port>,<zk3-host>:<zk3-port>

ZooKeeper服务地址,用于存储leader-election、应用信息与状态等,多个使用英文半角逗号(,)分隔。

特性说明

RM HA

RM HA工作原理是在不同节点上启动多个RM进程,通过Leader选举决定有且只有1个Active RM,并由Active RM记录应用的基本信息与状态,写入Zookeeper存储中。如果Active RM进程或其所在节点存在问题,Standby RM能够基于Zookeeper的分布式锁机制选举出1个Active RM,新的Active RM将从Zookeeper存储中恢复出全部应用的信息与状态,继续提供资源管理与调度服务,从而避免单点故障。1

RM HA相关的重要配置项如下表。

配置集

配置项

(推荐)配置值

说明

yarn-site.xml

yarn.resourcemanager.ha.enabled

true

是否开启HA特性,默认值false。

yarn.resourcemanager.ha.automatic-failover.enabled

true或者不配置

是否启用自动切换,默认值true。

yarn.resourcemanager.ha.automatic-failover.embedded

true或者不配置

是否使用嵌入的自动切换方式,默认值true。

yarn.resourcemanager.ha.curator-leader-elector.enabled

true

是否使用非Curator组件,默认值false。

yarn.resourcemanager.ha.automatic-failover.zk-base-path

不配置

Zookeeper的leader-elector根目录,默认值/yarn-leader-election

yarn.resourcemanager.ha.rm-ids

rm1,rm2,rm3

多个RM的ID列表,使用英文半角逗号(,)分隔。

yarn.resourcemanager.cluster-id

<cluster-id>

集群ID,Zookeeper存储路径中依赖。

yarn.resourcemanager.hostname.<rm-id>

不配置

hostname(RM实例级配置,有多个RM实例)。

yarn.resourcemanager.address.<rm-id>

不配置

Client提交作业的RPC地址(RM实例级配置,有多个RM实例)。

yarn.resourcemanager.scheduler.address.<rm-id>

不配置

ApplicationMasters申请资源的RPC地址(RM实例级配置,有多个RM实例)。

yarn.resourcemanager.resource-tracker.address.<rm-id>

不配置

NodeManagers汇报资源与任务状态的RPC地址(RM实例级配置,有多个RM实例)。

yarn.resourcemanager.admin.address.<rm-id>

不配置

Admin命令提交的RPC地址(RM实例级配置,有多个RM实例)。

yarn.resourcemanager.webapp.address.<rm-id>

不配置

HTTP访问地址(RM实例级配置,有多个RM实例)。

yarn.resourcemanager.webapp.https.address.<rm-id>

不配置

HTTPS访问地址,仅当yarn.http.policy= HTTPS_ONLY时可用(RM实例级配置,有多个RM实例)。

RM有状态重启

RM有状态重启包含两种模式:

  • 非工作保持(Non-work-preserving):RM重启后根据恢复的应用信息与状态,重新提交所有的运行中应用。对应用影响较大,所有运行中的应用都会被停止然后重新提交运行。

  • 工作保持(Work-preserving):RM重启后根据恢复的应用信息与状态,自动接管当前所有运行中的应用,尽量避免运行中应用受影响。

RM HA的工作保持模式的重要配置如下表。

配置集

配置项

(推荐)配置值

说明

yarn-site.xml

yarn.resourcemanager.recovery.enabled

true

是否启用RM有状态重启特性,默认值false。

yarn.resourcemanager.work-preserving-recovery.enabled

true或者不配置

是否启用工作保持模式,默认值true。

yarn.resourcemanager.store.class

org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

RM状态存储类,只有Zookeeper存储支持RM HA。

yarn.resourcemanager.zk-state-store.parent-path

不配置

RM维护的应用信息与状态在Zookeeper中的存储路径,默认/rmstore

NM有状态重启

NM有状态重启能够在NM短时间内重启恢复后,保证节点上运行的任务(Container)继续运行,无需停止并重新调度,从而满足应用无感知的基本要求。

NM有状态重启的重要配置项如下表。

配置集

配置项

(推荐)配置值

说明

yarn-site.xml

yarn.nodemanager.recovery.enabled

true

是否启用NM有状态重启特性,默认值false

yarn.nodemanager.recovery.dir

/home/hadoop/yarn-nm-recovery

存储任务信息与状态数据的本地目录,默认值为 ${hadoop.tmp.dir}/yarn-nm-recovery

建议将该目录存放在系统盘非/tmp目录下,并且确保hadoop用户有读写权限(推荐使用/home/hadoop/yarn-nm-recovery),避免/tmp目录数据丢失和数据盘坏盘处理影响NM服务。

yarn.nodemanager.recovery.supervised

true

是否在NM退出时保留本地数据以便能在重启后恢复,默认值false。

yarn.nodemanager.address

${yarn.nodemanager.hostname}:8041

0.0.0.0:8041

NM RPC地址,也用作NM ID。

  • 如果port不为0,则表示已设置为固定端口,无需修改该配置值。

  • 如果port为0(使用随机端口),NM重启后NM ID变化,导致NM有状态重启无效。因此,必须使用固定端口。