YARN (MRv2) ResourceManager High Availability

本文源自官网 Cloudera 5.3.x文档
http://www.cloudera.com/content/cloudera/zh-CN/documentation/core/v5-3-x/topics/cdh_hag_rm_ha_config.html

YARN ResourceManager (RM) 负责跟踪群集中的资源并安排应用程序(例如,MapReduce 作业)。在 CDH 5之前,RM 是 YARN 群集中的单点故障。RM 高可用性 (HA) 功能以活动/待机 RM 对形式添加冗余,以删除此单点故障。此外,在从待机 RM 到活动 RM 进行故障转移时,应用程序可以从其上次检查点状态恢复;例如,在 MapReduce 作业中完成的 map 任务不在后续的尝试中重新运行。这样可以在不对运行中的应用程序产生任何重要性能影响的情况下,处理以下事件:

  • 计划外事件,如计算机崩溃
  • 计划内维护事件,如在运行 ResourceManager 的计算机上进行的软件或硬件升级

RM HA 要求 Zookeeper 和 HDFS 服务处于运行状态。

  • 一 体系结构
    • 1 RM 重启
    • 2 隔离
    • 3 配置和 FailoverProxy
    • 4 自动故障转移
    • 5 手动转换和故障转移
  • 二 使用 Cloudera Manager
    • 1 启用 High Availability
    • 2 禁用 High Availability
  • 三 使用命令行
    • 1 停止 YARN daemon
    • 2 要配置自动故障转移
    • 3 配置工作保留恢复
    • 4 重启 YARN daemon
  • 四 使用 yarn rmadmin 管理 ResourceManager HA


一. 体系结构

RM HA 通过活动-待机 RM 对的方式实施。启动时,每个 RM 处于待机状态:启动过程,但未加载状态。转换到活动状态时,RM 会从指定的状态存储加载内部状态,并启动所有内部服务。管理员(通过的 CLI)或通过集成的故障转移控制器(启用自动故障转移时)可促进转换为活动状态。下面的小节提供了有关 RM HA 组件的更多详细信息。

1.1 RM 重启

RM 重启允许重启 RM,同时恢复运行中的应用程序(如果启用恢复)。为此,RM 将其内部状态(主要是与应用程序相关的数据和令牌)存储在 RMStateStore 中;NodeManagers 连接时,重新构建群集资源。状态存储的可用选择包括 MemoryRMStateStore(基于内存的实施)、FileSystemRMStateStore(基于文件系统的实施;HDFS 可用于文件系统)和 ZKRMStateStore(基于 Zookeeper 的实施)。

1.2 隔离

当运行两个 RM 时,如果两个 RM 都假定它们处于活动状态,则此时可能会出现“裂脑”情况。为了避免此情况,应只有一个 RM 能够执行活动操作,另一 RM 应“隔离”。基于 Zookeeper 的状态存储 (ZKRMStateStore) 允许单个 RM 更改已存储的状态,隐式隔离另一 RM。通过 RM 声明以独占方式创建-删除根 znode 上的权限,来实现这一操作。会根据为存储配置的 ACL 自动创建根 znode 上的 ACL;在安全群集中,Cloudera 建议您为根节点设置 ACL,以便两个 RM 共享读取-写入-管理访问权限,但拥有独占的创建-删除访问权限。隔离是隐式的,不需要显式配置(与 HDFS 中的隔离和 MRv1 操作的一样)。例如,如果您选择使用不同的状态存储实现,可以插入自定义“隔离程序”。

1.3 配置和 FailoverProxy

在 HA 设置中,您应配置两个 RM 以使用不同端口(例如,不同主机上的端口)。为有助于此操作,YARN 使用 RM 标识 符概念 (rm-id)。每个 RM 都有唯一的 rm-id,可以通过 . 配置该 RM 的所有 RPC 配置(;例如 yarn.resourcemanager.address)。客户端、ApplicationMasters 和 NodeManagers 使用这些 RPC 地址自动与活动 RM 通信,即使在故障转移后。为实现这一操作,它们在配置中循环 RM 列表。这将自动完成,不需要任何配置(与在 HDFS 和 MapReduce (mrv 1) 中执行的操作一样)。

1.4 自动故障转移

默认情况下,RM HA 使用 ZKFC(基于 Zookeeper 的故障转移控制器),在活动 RM 不可访问或发生故障时进行自动故障转移。ActiveStandbyElector 在内部用于选择活动的 RM。故障转移控制器作为 RM 的一部分运行(不像在 HDFS 和 MapReduce v1 中一样作为单独过程),在 yarn-site.xml 中配置相应的属性后,无需进一步设置。

如果愿意,可以插入自定义故障转移控制器。

1.5 手动转换和故障转移

您可以使用命令行工具 yarn rmadmin 将特定的 RM 转换为活动或待机状态,从一个 RM 故障转移到另一个,获取 RM 的 HA 状态,并监视 RM 的运行状况。


二. 使用 Cloudera Manager

您可以使用 Cloudera Manager 配置 ResourceManager High Availability (HA) 的 CDH 5 或更高版本。Cloudera Manager 支持 ResourceManager 的自动故障转移。不提供某种机制来手动强制通过 Cloudera Manager 用户界面进行故障转移。

Note:启用或禁用 HA 将导致以前的监控历史记录变得不可用。

2.1 启用 High Availability

  1. 转到 YARN 服务
  2. 选择操作 > 启用 High Availability。显示屏幕,显示符合运行待机 ResourceManager
    条件的主机。不可选择当前 ResourceManager 正在其中运行的主机
  3. 选择您想在其中安装备用 ResourceManager 的主机,然后单击继续。Cloudera Manager 继续执行一组命令,停止 YARN 服务,添加备用 ResourceManager,初始化 ZooKeeper 中的 ResourceManager High Availability 状态,重启 YARN 并重新部署相关的客户端配置
  4. 在 Cloudera Manager 中启用了 RM HA 时,默认情况下为 RM
    启用工作保留恢复。有关详细信息,包括禁用工作保留恢复的说明,请参阅 用于 YARN 组件的工作保留恢复。

    Note: ResourceManager HA 不会影响 JobHistory Server (JHS)。JHS 不保留任何状态,因此,如果主机出现故障,您只需将其分配给新主机即可。也可以通过执行下列操作来启用进程自动重启:

    1. 转到 YARN 服务
    2. 单击配置选项卡
    3. 展开 JobHistory Server 默认组
    4. 选择高级子类别
    5. 选中自动重启进程复选框
    6. 重启 JobHistory Server 角色

2.2 禁用 High Availability

要配置和启动 ResourceManager HA,操作如下所示。

  • 转到 YARN 服务
  • 选择操作 > 禁用 High Availability。显示屏幕,显示运行 ResourceManagers 的主机
  • 选择您要将哪个 ResourceManager(主机)保留为单个 ResourceManager,并单击继续。Cloudera
    Manager 执行一组命令,停止 YARN 服务,删除备用 ResourceManager 和故障转移控制器,重启 YARN
    服务,以及重新部署客户端配置


三. 使用命令行

要配置和启动 ResourceManager HA,操作如下所示。

  • 停止 YARN daemon
  • 配置手动故障转移,并根据需要选择自动故障转移
  • 重启 YARN daemon

3.1 停止 YARN daemon

停止所有节点(这些服务在其上运行)上的 MapReduce JobHistory 服务、ResourceManager 服务和 NodeManager,如下所示:

sudo service hadoop-mapreduce-historyserver stop
sudo service hadoop-yarn-resourcemanager stop
sudo service hadoop-yarn-nodemanager stop

**配置手动故障转移,并根据需要选择自动故障转移
要配置故障转移:**

Note:
在 yarn-site.xml 中配置以下属性(如下所示),无论您是配置手动还是自动故障转移。它们足以配置手动故障转移。您需要为自动故障转移配置其他属性。

名称 用于 默认值 建议值 说明
yarn.resourcemanager
.ha.enabled
ResourceManager、
NodeManager、
客户端
false true 启用 HA
yarn.resourcemanager
.ha.rm-ids
ResourceManager、
NodeManager、
客户端
(无) 特定于群集,例如, rm1,rm2 此群集中的 ResourceManager ID 的逗号分隔列表
yarn.resourcemanager
.ha.id
ResourceManager (无) 特定于 RM,例如, rm1 当前 ResourceManager 的 ID。必须在每个 ResourceManager 中显式设置为适当的值
yarn.resourcemanager
.address.
ResourceManager、
客户端
(无) 特定于群集 此 RM 的yarn.resourcemanager. address 值(客户端-RM RPC)。必须为所有 RM 设置
yarn.resourcemanager
.scheduler.address.
ResourceManager、
客户端
(无) 特定于群集 此 RM 的yarn.resourcemanager. scheduler.address 值 (AM-RM RPC)必须为所有 RM 设置
yarn.resourcemanager
.admin.address.
ResourceManager、
客户端/管理员
(无) 特定于群集 此 RM 的yarn.resourcemanager. admin.address 值(RM 管理)。必须为所有 RM 设置
yarn.resourcemanager
.resource-tracker.address.
ResourceManager、
NodeManager
(无) 特定于群集 此 RM 的 yarn.resourcemanager. resource-tracker.address 值 (NM-RM RPC)必须为所有 RM 设置
yarn.resourcemanager
.webapp.address.
ResourceManager、
客户端
(无) 特定于群集 此 RM 的 yarn.resourcemanager. webapp.address 值 (RM webapp)。必须为所有 RM 设置
yarn.resourcemanager
.recovery.enabled
ResourceManager false true RM 重启或故障转移时启用作业恢复
yarn.resourcemanager
.store.class
ResourceManager org.apache.hadoop
.yarn.server.resourcema
nager.recovery.
FileSystemRMStateStore
org.apache.hadoop.
yarn.server.resource
manager.recovery.
ZKRMStateStore
用于存储ResourceManager 内部状态的 RMStateStore 实现。基于 Zookeeper 的存储支持隐式隔离,即允许单个 ResourceManager 一次进行多项更改,所以推荐此操作
yarn.resourcemanager
.zk-address
ResourceManager (无) 特定于群集 用于存储 ResourceManager 内部状态的 ZooKeeper quorum
yarn.resourcemanager
.zk-acl
ResourceManager world:anyone:rwcda 特定于群集 ResourceManager 用于 znode 结构以存储内部状态的 ACL
yarn.resourcemanager
.zk-state-store.root-node.acl
ResourceManager (无) 特定于群集 用于 Zookeeper 状态存储的根节点的 ACL。此处设置的 ACL 应允许两个 ResourceManager 进行读取、写入和管理,拥有独占访问权限以创建和删除。如果未指定,将根据通过 yarn.resourcemanager.zk-acl 指定的 ACL,自动生成根节点 ACL。但这会在安全设置中留下安全漏洞

3.2 要配置自动故障转移:

在 yarn-site.xml 中配置以下额外属性,以配置自动故障转移。

3.3 配置工作保留恢复:

另外,您也可以为 Resource Manager 和 Node Manager 配置工作保留恢复。请参阅 用于 YARN 组件的工作保留恢复

名称 用于 默认值 建议值 说明
yarn.resourcemanager.
ha.automatic-failover.enabled
ResourceManager true true 启用自动故障转移
yarn.resourcemanager.ha.
automatic-failover.embedded
ResourceManager true true 使用 EmbeddedElectorService 从总体选择活动的 RM
yarn.resourcemanager.
cluster-id
ResourceManager 无默认值 特定于-群集 ActiveStandbyElector 所使用的群集名称,用于选择其
中一个 ResourceManager 作为领导


以下是展示这些已配置属性的示例 yarn-site.xml,包括 RM 和 NM 的工作保留恢复:

<configuration>
<!-- Resource Manager Configs -->
  <property>
    <name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>pseudo-yarn-rm-cluster</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  </property>
  <property>
    <name>yarn.resourcemanager.zk.state-store.address</name>
    <value>localhost:2181</value>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
    <value>5000</value>
  </property>
  <property>
    <name>yarn.resourcemanager.work-preserving-recovery.enabled</name>
    <value>true</value>
  </property>

  <!-- RM1 configs -->
  <property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>host1:23140</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>host1:23130</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.https.address.rm1</name>
    <value>host1:23189</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>host1:23188</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
    <value>host1:23125</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address.rm1</name>
    <value>host1:23141</value>
  </property>

  <!-- RM2 configs -->
  <property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>host2:23140</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>host2:23130</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.https.address.rm2</name>
    <value>host2:23189</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>host2:23188</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
    <value>host2:23125</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address.rm2</name>
    <value>host2:23141</value>
  </property>

<!-- Node Manager Configs -->
  <property>
    <description>Address where the localizer IPC is.</description>
    <name>yarn.nodemanager.localizer.address</name>
    <value>0.0.0.0:23344</value>
  </property>
  <property>
    <description>NM Webapp address.</description>
    <name>yarn.nodemanager.webapp.address</name>
    <value>0.0.0.0:23999</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/tmp/pseudo-dist/yarn/local</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/tmp/pseudo-dist/yarn/log</value>
  </property>
  <property>
    <name>mapreduce.shuffle.port</name>
    <value>23080</value>
  </property>
  <property>
    <name>yarn.resourcemanager.work-preserving-recovery.enabled</name>
    <value>true</value>
  </property>
</configuration>                

3.4 重启 YARN daemon

启动所有节点(它们以前在其上运行)上的 MapReduce JobHistory Server、ResourceManager 和 NodeManager,如下所示:

sudo service hadoop-mapreduce-historyserver start
sudo service hadoop-yarn-resourcemanager start
sudo service hadoop-yarn-nodemanager start


四. 使用 yarn rmadmin 管理 ResourceManager HA

您可以使用命令行中的 yarn rmadmin 来管理您的 ResourceManager HA 部署。yarn rmadmin 具有与 RM HA 相关的以下选项:

[-transitionToActive serviceId]
[-transitionToStandby serviceId]
[-getServiceState serviceId]
[-checkHealth <serviceId]
[-help <command>]

其中,serviceId 为 rm-id。
Note: 即使 -help 列出 -failover 选项,yarn rmadmin 也不支持此选项。

你可能感兴趣的:(YARN (MRv2) ResourceManager High Availability)