为什么会产生YRAN?这个与MapReduce1.x的架构有关,正是因为MapReduce1.x存在许多的问题,才会产生 YARN。
MapReduce1.x的架构如下:
Hadoop1.x时,MapReduce的架构仍然是主从架构。一个JobTracker带多个TaskTracker,主节点为JobTracker,只有一个,从节点为TaskTracker,可以有多个,从节点通过向主节点发送心跳信息(heartbeat)来告诉它自己的运行情况,而主节点则是负责管理调度的工作。
JobTracker(JT):负责资源管理和作业调度。
TaskTracker(TT):定期向JT汇报本节点的健康状况、资源使用情况、作业执行情况。接收来自JT的命令,从而启动任务或杀死任务。
那么这个架构存在什么样的问题呢?
首先是单点故障的问题,所有的从节点(TT)都是跟主节点(JT)直接关联的,如果主节点不小心挂了,那么整个系统就崩溃了,就没有办法运行了。
其次,JT的压力大且不易扩展,他要接收所有从节点(TT)的心跳信息(heartbeat)和客户端的请求,JT承担的职责特别多,随着集群扩展后,那么JT的压力就会越来越大。
最后,最大的问题就是兼容性问题,它不兼容除了MapReduce外的其他框架,比如Spark是不能跑在这个系统上的。
而有了YARN之后,基于YARN之上可以运行很多其他的计算框架,不同计算框架可以共享同一个HDFS集群上数据,享受整体的资源调度。它相当于操作系统,起着调度管理的工作。
关于YARN的概述我们在之前的文章中已经说过了,这里就不多介绍了。
YARN的架构如下图所示:
YARN的架构由这几个部分构成:
关于这个架构我是这么理解的,可以将它与企业或者公司的管理进行对比:
Client,很简单自然就是跟公司合作的客户。提交一个作业就相当于客户跟公司一笔生意谈成了,客户提要求,公司负责帮客户去完成项目,只是这里没有金钱交易而已。
RM,相当于公司的管事的boss,权力很大,所有公司的事都要听他的。我们对照则RM的作用一条一条来理解,首先,一个公司同一时间只能有一个拍板的,不能你说你的他说他的,最后整个公司也不知道听谁的,那就彻底乱套了。如果某天老板生病了,那就只能委托一个代理暂时帮他行使管理的责任,这个代理就是备用的RM。其次,老板可以决定项目何时终止,何时开始,这个很好理解。NM相当于公司下面分设的许多部门,AM相当于某个具体项目的负责人,具体的我们待会再说,暂时先这么理解。最后,老板可以随时知道部门的情况,如果某个部门集体度假了,或者出了什么重大事故,那么自然这个部门所牵涉的项目就要被搁置,这时候对于这个项目该怎么处理,是等他们回来再继续,还是直接把项目给其他的部门,这就要问这个项目的负责人了,怎么决断就要听他的意见,毕竟这个项目是他负责的。
NM所在的整个节点,相当于公司的各个部门,唯一的区别就是,在公司中,往往不会设立两个财务部门或三个人力部门,公司的部门往往是唯一的。而YARN 的结构中,每个节点并不具有唯一性,所以我们为了类比方便,可以假设这个公司有3个开发部门,4个测试部门这样。这样RM就可以理解成这个部门的负责人,显然RM对于本部门的情况是十分了解的,包括哪个人今天有没有来上班,部门现在的工作能力如何,是不是有人还处于空闲没事做的状态等等。负责人需要定期向老板递交工作记录(心跳信息)从而让老板知道这个部门的工作能力如何啊等等这些信息,这样下次有新任务的时候,老板就知道能不能分配给这个部门。作为部门负责人,自然得听老板的话,老板给你个任务,让你立马在部门中给我组个小组(container)完成,你就要执行老板的命令。同时对于项目负责人的要求,他也要尽量可能满足,比如项目负责人说我这个项目需要你们部门哪些哪些人帮我去做,那部门负责人就按照他的要求把那些人组成一个小组去执行任务。
AM,项目负责人或团队,一个公司可能有多个项目,自然每个项目需要有一个项目负责人。项目负责人在做项目的时候必定会用到公司中的资源,比如开会需要会议室、打印机啊,那自然得跟老板去申请说,我这个项目需要利用公司的会议室、打印机等等,老板说可以啊没问题,那么他拿到这些资源后就会给每个小组说,我已经帮你们申请到这些东西了,以后你们要用的话就直接可以用了。最后,他可以跟某个部门的负责人说,我需要你们部门的几个人组成一个小组(container)来帮我做这个项目,或者你们部门的这个小组做的不行,我不要他们了。
container就是一个小组,小组内有大家可以共用的一些资源,每个项目分成一个个小的任务也是在各个小组中完成的,每个小组都属于某个部门,一个部门可以有若干个小组。
不知道这样说会不会对理解YARN的架构有所帮助,这只是我在看到这个架构时的一些理解。
其实这个流程并不是很复杂,可以对照着之前举的公司的例子,把相应的角色带入进去理解一下流程。
我们再来思考一个问题,为什么说在1.x版本不能支持其他计算框架的运行,而使用了YARN后就可以了呢?关键在于这个流程是个通用的流程,AM作为应用程序的主控程序,如果我们对于相应的框架都做出对应的AM的实现,也就是说,如果是MapReduce,那么这里的AM就是MapReduce对应的AM,对于spark也是同样的道理。那么在YARN之上就可以运行很多计算框架了。其实可以把YARN的作用理解成可以跑各种计算框架的操作系统,就跟使用Windows操作系统,你就可以在这个操作系统上运行各种软件一样。
更多的信息可以参见hadoop官网上关于YARN架构的文档描述(http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html)。