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 服务处于运行状态。



一. 体系结构

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、
客户端
falsetrue启用 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
ResourceManagerfalsetrueRM 重启或故障转移时启用作业恢复
yarn.resourcemanager
.store.class
ResourceManagerorg.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
ResourceManagerworld: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
ResourceManagertruetrue启用自动故障转移
yarn.resourcemanager.ha.
automatic-failover.embedded
ResourceManagertruetrue使用 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 也不支持此选项。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值