在Apache Hadoop 2.0的第一个稳定版本2.2.0中,资源管理系统YARN存在单点故障,且尚未解决。YARN ResourceManage HA的相关jira为YARN-149,目前正在火热开发中,但尚未公布将来的发布版本。由于YARN是一个通用管理系统,是上层计算框架(MapReduce、Tez、Spark、Storm等)的基础服务,它的重要性不言而喻,提高它的可靠性和容错性是当务之急。
在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内部保存的信息非常少,大部分可以重构,且这些信息是动态变化的,很快会变旧。
目前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会被杀死,重新执行)。
目前,CDH5 beta的YARN HA实现仍然是粗粒度的,相比于Apache Hadoop 2.2.0版本,可认为它新增了ResourceManager主备间的自动切换,仅比Apache Hadoop 2.2.0人工切换或者重启先进一点,但重启之后的整个流程是一致的。
由于YARN是一个通用资源管理系统,它上面可能运行短作业或长作业,比如各类长时间运行的服务(比如Storm,thirft server等),如果每次ResourceManager切换均会导致所有正在运行的任务和作业重算或重启,是无法接受的,尤其是在YARN上部署一些在线服务时,更不可能接受。因此,YARN的HA解决方案离真正可用、符合实际应用场景,还有较长的一段距离。
来源:oschina
链接:https://my.oschina.net/u/1169079/blog/263699