继上篇文章验证Cloudera RM HA功能后,现在开始分析Cloudera RM HA的原理。

设计目标

主要目的是为了解决两种问题

  1. 计划外的机器挂掉
  2. 计划内的如软件和硬件升级等.

架构

流程:两个RM, 启动的时候都是standby, 进程启动以后状态未被加载, 转换为active后才会加载相应的状态并启动服务. RM的状态通过配置可以存储在zookeeper, HDFS上。Standby转换到active可以通过命令或开启auto failover。

  1. RM 的作业信息存储在ZK的/rmstore下,Active RM向这个目录写App信息。
  2. RM启动的时候会通过向ZK的/hadoop-ha目录下写一个Lock文件,写成功则成为Active,否则为Standby,Standby RM会一直监控Lock文件是否存在,如果不存在则会试图去创建,即争取成为Active RM。
  3. 当Active RM挂掉,另外一个Standby RM成功转换为Active RM后,会从/rmstore读取相应的作业信息,重新构建作业的内存信息。然后启动内部服务,开始接收NM的心跳,构建集群资源信息,并接收客户端提交作业的请求等。

社区trunk版本当前也已经支持RM HA,但只支持手动切换,不支持Auto Failover。社区的基本原理和Cloudera RM HA类似,其架构图如下图所示:

对比Cloudera RM HA的架构图,仅少了Auto Failover部分。

服务端RM HA的关键部分主要为RMStateStore和ZKFailoverController。RMStateStore是实现RM状态存储的基类,主要包括存储和加载RM状态等方法。实现类主要包括FileSystemRMStateStore和ZKRMStateStore。类图如下图所示。

ZKFailoverController中维护着ActiveStandbyElector和HealthMonitor,ActiveStandbyElector主要工作是。

1. 初始化时在ZK上创建一个Lock文件,

2. Standby RM运行过程中监控ZM上的Lock文件是否存在。

HealthMonitor的主要工作是检查自己(RM)的健康状态,通过HAServiceStatus提供的getServiceStatus()和monitorHealth()方法,如果自己健康的,则会试图创建Lock文件,按照结果成为active或standby。下图是ZKFailoverController的类图,图中可以看出,Cloudera的Hadoop版本中,NameNode、Jobtracker和ResourceManager都采用相同的Auto Failover机制。

客户端的实现机制

在RM HA之前,客户端与RM的通信直接使用ApplicationClientProtocol等协议,增加RM HA后,客户端使用RetryPolicy,它提供了一种重试机制,但一个RM连不上,则会Failover到另外一台RM上。具体的实现方法是采用动态代理模式,增加RMProxy实现retry方式连接RM。下图是RMProxy的类图。

其中ClientRMProxy,代理ApplicationClientProtocol、ApplicationMasterProtocol、ResourceManagerAdministrationProtocol,实现 Yarn client、AM与RM的连接。ServerRMProxy提供给NM连接RM使用。代理ResourceTracker。

[RM HA 2] Hadoop 2.0 ResourceManager HA原理的更多相关文章

  1. Hadoop 2.0 NameNode HA和Federation实践【转】

    Hadoop 2.0 NameNode HA和Federation实践 Posted on 2012/12/10 一.背景 天云趋势在2012年下半年开始为某大型国有银行的历史交易数据备份及查询提供基 ...

  2. Hadoop 2.0中单点故障解决方案总结

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  3. 安装部署Apache Hadoop (完全分布式模式并且实现NameNode HA和ResourceManager HA)

    本节内容: 环境规划 配置集群各节点hosts文件 安装JDK1.7 安装依赖包ssh和rsync 各节点时间同步 安装Zookeeper集群 添加Hadoop运行用户 配置主节点登录自己和其他节点不 ...

  4. Hadoop NameNode HA 和 ResourceManager HA

    1.集群规划 1.1 规划说明 hadoop1 cluster1 nameNode hadoop2 cluster1 nameNodeStandby ZooKeeper ResourceManager ...

  5. 【Hadoop学习】Apache Hadoop ResourceManager HA

    简介 本向导简述了YARN资源管理器的HA,并详述了如何配置并使用该特性.RM负责追踪集群中的资源,并调度应用程序(如MapReduce作业).Hadoop2.4以前,RM是YARN集群中的单点故障. ...

  6. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  8. Hadoop 2.7.3 HA 搭建及遇到的一些问题

    看了Hadoop的一个7天视频教程,里面给出了搭建的详细步骤,教程中是按2.4.1版本搭建的,我用的是2.7.3版本,好像没什么差别.下面是抄过来的,加了一点注释. hadoop2.0已经发布了稳定版 ...

  9. Hadoop2.0 Namenode HA实现方案

    Hadoop2.0 Namenode HA实现方案介绍及汇总 基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容.hadoop2.0主要的新特性(Hadoop2 ...

随机推荐

  1. TFS(Taobao File System)安装方法

    文章目录: 一.TFS(Taobao File System)安装方法 二.TFS(Taobao File System)配置dataServer.分区.挂载数据盘 三.TFS(Taobao File ...

  2. iOS8 无法设置定位服务

    针对iOS8系统,需要在plist文件中添加这两个参数 NSLocationAlwaysUsageDescription = YES NSLocationWhenInUseUsageDescripti ...

  3. 将获得到的json赋值到下拉框

    $(function () { $.getJSON('handler/addEmployees.ashx', function (json) { alert(json.length); //遍历赋值 ...

  4. find用法

    find - 递归地在层次目录中处理文件 总 find [path...] [expression] 描 这个文档是GNU版本 find 命令的使用手册. find 搜索目录树上的每一个文件名,它从左 ...

  5. 2.Modelsim打开时出现的Error

    Modelsim之error “unable to check out a viewer license necessary for use of the modelsim graph.Vsim is ...

  6. Session invalidate

    会清空所有已定义的session 而不是清空全部session的值也就是说 定义了一个名为 user 的session 调用invalidate()方法后使用Session.getValue(“use ...

  7. 【转】eclipse下使用hibernate tools实现hibernate逆向工程

    一.基本环境 Eclipse 3.6 AppFuse Struts2 2.1.0 JBoss Hibernate Tools 3.4.0 二.JBoss Hibernate Tools 3.4.0安装 ...

  8. 【Sort List】cpp

    题目: Sort a linked list in O(n log n) time using constant space complexity. 代码: /** * Definition for ...

  9. JS 学习笔记--8---Function类型

    练习使用的浏览器IE11   JS 中Function类型实际上是一种对象,每一个函数实际上都是Function类型的一个实例,每一个函数都有一些默认的属性和方法.由于函数是对象,故函数名实际上也是一 ...

  10. poj 1273 Drainage Ditches 最大流入门题

    题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...