Hadoop YARN单点故障解决方案(HA)介绍

在Apache Hadoop 2.0的第一个稳定版本2.2.0中,资源管理系统YARN存在单点故障,且还没有解决。YARN ResourceManage HA的相关jira为YARN-149,目前正在火热开发中,但还没有公布未来的发布版本。因为YARN是一个通用管理系统,是上层计算框架(MapReduce、Tez、Spark、Storm等)的基础服务,它的重要性不言而喻,提升它的可靠性和容错性是当务之急。apache

在Cloudera公司最新发布的CDH5(基于apache hadoop 2.2.0下载地址为:CDH5-beta-1下载)中,自带了YARN HA实现,尽管该版本目前为beta版,但考虑到该方案采用了Hadoop 2.0中自带的HA框架实现(HDFS HA和MapReduce HA均采用该框架实现),所以,具备必定通用性,本文将介绍CDH5-beta中的YARN HA实现。架构

在“Hadoop 2.0单点故障解决方案”一文中,我已经详细介绍了Hadoop 2.0自带的HA框架,HDFS和YARN的单点故障均会基于该框架解决。值得一说的是,该框架是通用的,且已经作成了一个库放在Common中,你能够将它做为三方库使用。框架

YARN的单点故障指的是ResourceManager单点问题,ResourceManager负责整个系统的资源管理和调度,内部维护了各个应用程序的ApplictionMaster信息,NodeManager信息,资源使用信息等。考虑到这些信息绝大多数能够动态重构,所以解决YARN单点故障要比HDFS单点容易不少。与HDFS相似,YARN的单点故障仍采用主备切换的方式完成,不一样的是,备节点不会同步主节点的信息,而是在切换以后,才从共享存储系统读取所需信息。之因此这样,是由于YARN ResourceManager内部保存的信息很是少,大部分能够重构,且这些信息是动态变化的,很快会变旧。oop

目前CDH5-beta中,单点故障解决方案还是粗粒度的,它借助Zookeeper完成主备节点信息共享。它仅在Zookeeper上保存Application ID和ApplicationAttempt ID,以便故障恢复后从新建立这些Application,其余信息则动态重构或者丢弃,好比NodeManager信息(包括可用资源,健康状态等信息),需由NodeManager从新经过RPC汇报,而资源使用信息(每一个节点资源使用状况,每一个任务资源获取状况等)则所有重置,也就是说,故障恢复或者ResourceManager主备切换后,整个集群跟重启过同样,只不过是以前正在运行的应用程序不须要从新提交,但已经分配的资源信息则所有丢失。这意味着,NodeManager从新跟新的ResourceManager链接后,ResourceManager发送的第一个指令是让NodeManager重启,而NodeManager会杀死全部正在运行的Container。线程

同HDFS和MapReduce同样,YARN HA可存在两种模式,分别是手动模式和自动模式,在手动模式下,全部ResourceManager启动后将进入standby状态,须要由管理员经过命令将一个切换为active状态,YARN集群才可对外提供服务;而自动模式则基于zookeeper实现,基本的实现思想是,全部ResourceManager启动后,将建立Zookeeper下的同一个目录,谁建立成功,则谁进入active状态,其余的自动转入standby状态。YARN的自动模式架构图以下所示,各个组件的做用已在“Hadoop 2.0单点故障解决方案”一文中进行了详细的介绍,整个架构与CDH4中MapReduce JobTracker的HA解决思路一致,具体可参考“CDH中的JobTracker HA方案介绍”,与该架构不一样的是,ZKFailoverController(ZKFC)属于RMHAProtocolService中的一个线程,而RMHAProtocolService自己则变成ResourceManager内部的一个服务,这意味着你无需启动一个单独的ZKFC(下图为了方便说明,将ZKFC独立画出来)。日志

此外,须要补充说明的是,YARN ResourceManager只负责ApplicationMaster的状态维护和容错,ApplicationMaster内部管理和调度的任务,好比MapTask和ReduceTask,则须要由AppicationMaster本身容错,这不属于YARN这个系统管理的范畴。好比MapReduce的ApplicationMaster—MRAppMaster会在HDFS上记录Task运行日志,这样,当它运行失败从新被调度到另一个节点运行时,会从新从HDFS上读取日志,恢复已经运行完成的Task,而只需为那些未运行完成的任务申请资源和二次调度(注意,以前正在运行的Task会被杀死,从新执行)。orm

目前,CDH5 beta的YARN HA实现仍然是粗粒度的,相比于Apache Hadoop 2.2.0版本,可认为它新增了ResourceManager主备间的自动切换,仅比Apache Hadoop 2.2.0人工切换或者重启先进一点,但重启以后的整个流程是一致的。server

因为YARN是一个通用资源管理系统,它上面可能运行短做业或长做业,好比各种长时间运行的服务(好比Storm,thirft server等),若是每次ResourceManager切换均会致使全部正在运行的任务和做业重算或重启,是没法接受的,尤为是在YARN上部署一些在线服务时,更不可能接受。所以,YARN的HA解决方案离真正可用、符合实际应用场景,还有较长的一段距离。blog

相关文章
相关标签/搜索