Hadoop-2.4.1学习之高可用ResourceManager

原创 2014年12月04日 16:33:15

       在Hadoop-2.4之前,Yarn中的ResourceManager也是单点故障中的,就像Hadoop-1.x中的NameNode,由于Hadoop-2.X已经支持NameNode的HA(高可用性),那么自然也要在hadoop的某个版本中实现ResourceManager的HA,否则又会招致一些事后诸葛亮的诟病。本文将介绍RM的高可用性,并详细学习如何配置和使用该特性。就像NameNode的HA一样,ResourceManager的HA也是通过冗余的Active/Standby ResourceManagers消除单点故障所存在的问题。

      RM的HA架构如下(引自官方图片),该图所展示的架构与NameNode有很多相似之处,比如支持自动或手动的故障转移,使用ZooKeeper保存Active RM的状态等。


      ResourceManager的HA是通过Active/Standby架构实现的,在任何时间点只有一个RM处于active状态,而剩余的RM(一个或多个)则处于standby状态,时刻准备着接管active的工作。可以通过在CLI输入命令或者在自动故障转移启动的前提下通过集成的故障转移控制器实现standby到active的转换,也就是手动故障转移和自动故障转移。

      在没启用自动故障转移的情况下,管理员必须手动地将处于standby状态的RMs之一转换为active状态。手动故障转移必须首先将原先处于active的RM转换为standby状态,然后再将一个standby RM转换为active,具体的命令为:yarn rmadmin。在自动故障转移方面,RM与NameNode略有不同,RM不需要运行单独的守护进程ZKFC,这是因为RM有内置的基于ZooKeeper的ActiveStandbyElector类用于在active RM宕机或者无响应时自动选择哪个standbyRM将做为active RM,因为该类实现了ZKFC的功能。

      当存在多个RMs时,需要在yarn-site.xml中罗列所有RMs,这是因为客户端、ApplicationMasters (AMs) 和NodeManagers (NMs)以循环的方式尝试连接RM直到连接上active RM。当active RM不可用时,再按照循环的方式尝试连接RMs,直到遇上新的active RM。默认的尝试逻辑由org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider实现,可以通过实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider接口和设置yarn.client.failover-proxy-provider的值为新类以覆盖默认逻辑。

      如果也启用了RM的重启特性,正在变为active状态的RM能够加载RM的内部状态和尽可能多的继续先前active RM遗留的操作。将为每个之前提交到RM的应用程序提交新的尝试,应用程序可以周期性地进行检查点以避免丢失任何工作。状态存储必须对于Active/Standby RMs都是可见的,正如之前已经了解的,目前提供了两个状态存储:FileSystemRMStateStore和ZKRMStateStore,建议在RM HA集群中使用后者做为状态存储。

      正如Hadoop大部分特性都可以通过配置参数进行设置一样,RM的HA也可以通过下表中的参数进行设置(更详细的信息可以参考yarn-default.xml):

参数

描述

yarn.resourcemanager.zk-address

ZooKeeper服务器的地址(主机:端口号),既用于状态存储也用于内嵌的leader-election

yarn.resourcemanager.ha.enabled

是否启用RM HA,默认为false(不启用)。

yarn.resourcemanager.ha.rm-ids

RMs的逻辑id列表,用逗号分隔,如:rm1,rm2

yarn.resourcemanager.hostname.rm-id

每个rm-id的主机名,rm-id的值包含在上面的参数值中。

yarn.resourcemanager.ha.id

可选项,用于标识RM。如果设置了,管理员需要确保所有的RMs在配置中都有自己的ID

yarn.resourcemanager.ha.automatic-failover.enabled

是否启用自动故障转移。默认情况下,在启用HA时,启用自动故障转移。

yarn.resourcemanager.ha.automatic-failover.embedded

启用内置的自动故障转移。默认情况下,在启用HA时,启用内置的自动故障转移。

yarn.resourcemanager.cluster-id

集群的Idelector使用该值确保RM不会做为其它集群的active

yarn.client.failover-proxy-provider

Clients, AMsNMs使用该类故障转移到active RM

yarn.client.failover-max-attempts

FailoverProxyProvider尝试故障转移的最大次数。

yarn.client.failover-sleep-max-ms

故障转移间的最大休眠时间(单位:毫秒)。

yarn.client.failover-retries

每个尝试连接到RM的重试次数。

yarn.client.failover-retries-on-socket-timeouts

socket超时时,每个尝试连接到RM的重试次数。

      下面是RM故障转移的简单配置示例,在该示例中启用了HA,那么也就启用了自动故障转移。

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

      正如上面提到的,hadoop也为管理员提供了CLI的方式管理RM HA,但在没有启用HA的情况下,下面的命令是不可用的:

[hadoop@hadoop ~]$ yarn rmadmin -getServiceState
Cannot run -getServiceState when ResourceManager HA is not enabled
[hadoop@hadoop ~]$ yarn rmadmin -transitionToStandby
Cannot run -transitionToStandby when ResourceManager HA is not enabled

      假设已经启用了HA,那么就可以通过CLI的方式查看RM的状态和手动进行故障转移,假设yarn.resourcemanager.ha.rm-ids的值为rm1和rm2:

$ yarn rmadmin -getServiceState rm1
 active
$ yarn rmadmin -getServiceState rm2
 standby

      手动故障转移必须在自动故障转移禁用的前提下执行,否则会出现split-brain的情形或者其它不正确的状态,手动故障转移的命令为:

$ yarn rmadmin -transitionToStandby rm1
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

(12)ResourceManager高可用性

介绍建筑 RM故障转移恢复以前的活跃RM的状态 部署 配置管理命令ResourceManager Web UI服务网页服务 介绍 本指南概述了YARN的ResourceMan...

Hadoop2的ResourceManager高可用配置

Hadoop 2.2没怎么关注过,太新,bug太多。2.4出来以后关注了一些东西,比如2.4里面直接带了ResourceManager的高可用,这点比较吸引人。之前2.2没注意有没有,貌似是没有,然后...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Hadoop 增加Journal Node 或者 维护Journal Node问题

以hadoop用户执行以下操作: 1.修改etc/hadoop/hdfs-site.xml,在dfs.namenode.shared.edits.dir 配置项中增加相应的新的journal的地址和...

YARN源码学习(五)-----NN,DN,RM在Ganglia上的监控实现机理

前言任何分布式系统在不断演变的过程中,必然都会经过有小变到大的过程,中间也必定会由不稳定到逐步稳定的过程.在所有的这些系统能够稳定运行的一个前提是,完整的监控和报警系统.这个模块是系统保持稳定最最基础...

Resourcemanager HA

1.官网resourcemanager HA  Introduction This guide provides an overview of High Availability of...

hadoop、zookeeper、hbase、spark集群环境搭建

本文详细讲解如何搭建hadoop、zookeeper、hbase和spark的集群环境,这里我是在本地虚拟机上搭建的集群,但是和实际环境的配置差不多。我会从零开始搭建并且尽量写得详细,所以还会讲到很多...
  • Trigl
  • Trigl
  • 2016-09-13 09:44
  • 4508

【HBase】Rowkey设计

本章将深入介绍由HBase的存储架构在设计上带来的影响。如何设计表、row key、column等等,尽可能地使用到HBase存储上的优势。 Key设计 HBase有两个基础的主键结构...

HBase详细概述

本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理存储、HBase系统架构、HBase三维有序存储、HBase调优、HBase Shel...

HBase集群搭建

一、安装环境: 至少两台linux主机,假设两台机器的登录用户名都为hbase,并且IP分配如下: 192.168.7.85         master机器 192.168.7.72  ...

Hadoop2.7.2+Hbase1.2.1分布式环境搭建整理

Hadoop2.7.2+Hbase1.2.1分布式环境搭建整理
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)