本文介绍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存储中恢复出全部应用的信息与状态,继续提供资源管理与调度服务,从而避免单点故障。
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访问地址,仅当 |
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 | 存储任务信息与状态数据的本地目录,默认值为 建议将该目录存放在系统盘非/tmp目录下,并且确保hadoop用户有读写权限(推荐使用 | |
yarn.nodemanager.recovery.supervised | true | 是否在NM退出时保留本地数据以便能在重启后恢复,默认值false。 | |
yarn.nodemanager.address |
| NM RPC地址,也用作NM ID。
|