本指南概述了YARN ResourceManager的高可用性,并详细介绍了如何配置和使用此功能。ResourceManager(RM)负责跟踪群集中的资源,并调度应用程序(例如MapReduce作业)。在Hadoop 2.4之前,ResourceManager是YARN群集中的单点故障。高可用性功能以“活动/备用ResourceManager”对的形式添加了冗余,以消除此单点故障。
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时,预计客户端和节点使用的配置(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的值设置为类名来覆盖逻辑。
随着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.policy到HTTP_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。
假设备用RM已启动并正在运行,则在备用RM上调用ResourceManager REST API中描述的RM Web服务会自动重定向到活动RM。
如果您正在负载平衡器(例如Azure或AWS)后面运行一组ResourceManager,并且希望负载平衡器指向活动RM,则可以将/ isActive HTTP端点用作运行状况探针。如果RM处于活动HA状态,则http:// RM_HOSTNAME / isActive将返回200状态代码响应,否则返回405。