Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

介绍

本指南概述了YARN ResourceManager的高可用性,并详细介绍了如何配置和使用此功能。ResourceManager(RM)负责跟踪群集中的资源,并调度应用程序(例如MapReduce作业)。在Hadoop 2.4之前,ResourceManager是YARN群集中的单点故障。高可用性功能以“活动/备用ResourceManager”对的形式添加了冗余,以消除此单点故障。

建筑

ResourceManager高可用性概述

RM故障转移

ResourceManager HA通过Active / Standby体系结构实现-在任何时间,RM之一都处于活动状态,并且一个或多个RM处于Standby模式,等待活动发生任何事情。启用自动故障转移后,转换为活动状态的触发来自管理员(通过CLI)或集成的故障转移控制器。

手动转换和故障转移

如果未启用自动故障转移,则管理员必须手动将其中一个RM转换为Active。要从一个RM到另一个RM进行故障转移,他们应该先将Active-RM转换为Standby,然后将Standby-RM转换为Active。所有这些都可以使用“ yarn rmadmin ” CLI完成。

自动故障转移

RM可以选择嵌入基于Zookeeper的ActiveStandbyElector,以确定哪个RM应该是Active。当Active发生故障或无响应时,另一个RM被自动选为Active,然后接管。请注意,无需像HDFS那样运行单独的ZKFC守护程序,因为嵌入在RM中的ActiveStandbyElector充当故障检测器和领导选举人,而不是单独的ZKFC守护进程。

RM故障转移上的客户端,ApplicationMaster和NodeManager

当有多个RM时,预计客户端和节点使用的配置(yarn-site.xml)会列出所有RM。客户端,ApplicationMaster(AM)和NodeManager(NM)尝试以循环方式连接到RM,直到它们到达活动RM。如果活动服务器出现故障,他们将继续轮询,直到命中“新”活动服务器为止。此默认重试逻辑实现为org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider。您可以通过实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider并将yarn.client.failover-proxy-provider的值设置为类名来覆盖逻辑。

恢复以前的活动RM的状态

随着ResourceManager的重新启用,RM被晋升为活动状态负载RM内部状态,并继续从操作在以前的活动左尽可能取决于RM重启功能关闭。对于先前提交给RM的每个托管应用程序,都会产生新的尝试。应用程序可以定期检查点以避免丢失任何工作。状态存储必须在两个活动/备用RM中均可见。当前,有两种用于持久性的RMStateStore实现-FileSystemRMStateStore和ZKRMStateStore。该ZKRMStateStore隐式允许在任何时间点对单个RM进行写访问,因此建议在HA群集中使用该存储。使用ZKRMStateStore时,无需使用单独的防护机制来解决潜在的裂脑情况,在这种情况下,多个RM可以潜在地充当主动角色。使用ZKRMStateStore时,建议不要在Zookeeper群集上设置“ zookeeper.DigestAuthenticationProvider.superDigest ”属性,以确保Zookeeper管理员无法访问YARN应用程序/用户凭证信息。

部署方式

构型

大多数故障转移功能都可以使用各种配置属性进行调整。以下是必需/重要的列表。yarn-default.xml包含旋钮的完整列表。有关更多信息,包括默认值,请参见yarn-default.xml。另请参阅“ ResourceManager重新启动 ”文档,以获取有关设置状态存储的说明。

配置属性 描述
hadoop.zk.address ZK仲裁的地址。用于状态存储和嵌入式领导者选举。
yarn.resourcemanager.ha。已启用 启用RM HA。
yarn.resourcemanager.ha.rm-ids RM的逻辑ID列表。例如“ rm1,rm2”。
yarn.resourcemanager。主机名。rm-id 对于每个rm-id,指定RM对应的主机名。或者,可以设置RM的每个服务地址。
yarn.resourcemanager.address。rm-id 对于每个rm-id,请指定host:port以便客户端提交作业。如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名rm-id
yarn.resourcemanager.scheduler.address。rm-id 对于每个rm-id,为ApplicationMasters指定调度程序host:port以获得资源。如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名rm-id
yarn.resourcemanager.resource-tracker.address。rm-id 对于每个rm-id,请指定host:port以供NodeManagers连接。如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名rm-id
yarn.resourcemanager.admin.address。rm-id 对于每个rm-id,为管理命令指定host:port。如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名rm-id
yarn.resourcemanager.webapp.address。rm-id 对于每个rm-id,指定RM Web应用程序对应的host:port。如果将yarn.http.policy设置为HTTPS_ONLY,则不需要此选项。如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名rm-id
yarn.resourcemanager.webapp.https.address。rm-id 对于每个rm-id,请指定RM https Web应用程序对应的host:port。你不需要这个,如果你设置yarn.http.policyHTTP_ONLY。如果设置,将覆盖yarn.resourcemanager.hostname中设置的主机名rm-id
yarn.resourcemanager.ha.id 在集合中标识RM。这是可选的;但是,如果已设置,则管理员必须确保所有RM在配置中都具有自己的ID。
yarn.resourcemanager.ha.automatic-failover.enabled 启用自动故障转移;默认情况下,仅在启用HA时启用它。
内置了yarn.resourcemanager.ha.failover 启用自动故障转移后,请使用嵌入式的leader-elector选择活动RM。默认情况下,仅在启用HA时启用它。
yarn.resourcemanager.cluster-id 标识集群。由选民使用,以确保RM不会接替另一个群集的活动状态。
yarn.client.failover代理提供者 客户端,AM和NM用于故障转移到活动RM的类。
yarn.client.failover-max-尝试 FailoverProxyProvider应该尝试故障转移的最大次数。
yarn.client.failover-sleep-base-ms 用于计算故障转移之间的指数延迟的睡眠基准(以毫秒为单位)。
yarn.client.failover-sleep-max-ms 故障转移之间的最大睡眠时间(以毫秒为单位)。
yarn.client.failover重试 每次尝试连接到ResourceManager的重试次数。
yarn.client.failover重试套接字超时 套接字超时时每次尝试连接到ResourceManager的重试次数。

样本配置

这是RM故障转移的最小设置示例。

<属性>
  <name> yarn.resourcemanager.ha.enabled </ name>
  <value> true </ value>
</ property>
<属性>
  <name> yarn.resourcemanager.cluster-id </ name>
  <value> cluster1 </ value>
</ property>
<属性>
  <name> yarn.resourcemanager.ha.rm-ids </ name>
  <value> rm1,rm2 </ value>
</ property>
<属性>
  <name> yarn.resourcemanager.hostname.rm1 </ name>
  <value> master1 </ value>
</ property>
<属性>
  <name> yarn.resourcemanager.hostname.rm2 </ name>
  <value> master2 </ value>
</ property>
<属性>
  <name> yarn.resourcemanager.webapp.address.rm1 </ name>
  <value> master1:8088 </ value>
</ property>
<属性>
  <name> yarn.resourcemanager.webapp.address.rm2 </ name>
  <value> master2:8088 </ value>
</ property>
<属性>
  <name> hadoop.zk.address </ name>
  <value> zk1:2181,zk2:2181,zk3:2181 </ value>
</ property>

管理员命令

yarn rmadmin具有一些特定于HA的命令选项,用于检查RM的运行状况/状态,并转换为“活动” /“待机”。HA的命令将用yarn.resourcemanager.ha.rm-ids设置的RM服务ID作为参数。

 $ yarn rmadmin -getServiceState rm1
 活性
 
 $ yarn rmadmin -getServiceState rm2
 支持

如果启用了自动故障转移,则不能使用手动转换命令。尽管您可以通过–forcemanual标志覆盖它,但是您需要谨慎。

 $ yarn rmadmin -transitionToStandby rm1
 为org.apache.hadoop.yarn.client.RMHAServiceTarget@1d8299fd启用了自动故障转移
 拒绝手动管理HA状态,因为这可能会导致
 脑裂情况或其他错误状态。
 如果您确定自己知道自己在做什么,请
 指定forcemanual标志。

有关更多详细信息,请参见YarnCommands

ResourceManager Web UI服务

假设备用RM已启动并正在运行,备用服务器将自动将所有Web请求重定向到活动服务器,“关于”页面除外。

网页服务

假设备用RM已启动并正在运行,则在备用RM上调用ResourceManager REST API中描述的RM Web服务会自动重定向到活动RM。

负载均衡器设置

如果您正在负载平衡器(例如AzureAWS)后面运行一组ResourceManager,并且希望负载平衡器指向活动RM,则可以将/ isActive HTTP端点用作运行状况探针。如果RM处于活动HA状态,则http:// RM_HOSTNAME / isActive将返回200状态代码响应,否则返回405。