YARN 即MapReduce V2版本。相比MapReduce V1 它有很多优点:
1. 分散了jobTracker 的任务。资源管理任务由资源管理器负责,作业启动、运行和监测任务由分布在集群节点上的应用主题负责。这样大大减缓了MapReduce V1中jobTracker 单点瓶颈和单点风险的问题,大大提高了集群的扩展性和可用性。
2.在MapReduce V2中ApplicationMaster是一个用户可定制的部分,因此用户可以针对编程模型编写自己的应用主题程序。这样大大扩展了MapReduce V2 的适用范围。
3.在资源管理上使用Zookper实现故障转移。当资源管理故障时,备用资源管理器将根据保存在ZooKeeper中的集群状态快速启动。MapReduce V2支持应用程序指定检查点。这就能保证应用主题在失败后能迅速根据hdfs上的状态的状态重启。这两个措施大大提高了MapReduce V2的可用性。
4.集群资源统一组织成资源容器,而不像在MapReduce V1中Map池和Reduce池有所差别。这样只要有任务请求资源,调度器就会将集群中的可用资源分配给请求任务,而无关资源类型。这就大大提高了资源的利用率。
其实YARN还有很多优点,在这里就不尽兴一一列举。主要说一下YARN的工作流程。
YARN 具体由哪些部分组成:
YARN共有ResourceManager、NodeManager、JobHistoryServer、Containers、Application Master、job、Task、Client组成。
> Resource Manager: 一个Cluster 只有一个,负责资源调度、资源分配等工作。
> JobHistory Server: 负责查询job运行进度及元数据管理。
> nodemanager:运行在datanode节点,负责启动Application和对资源的管理。
> Containers: Container通过ResourceManager分配。包括容器的cpu、内存等资源。
> Application master:通俗来说Application master 相当于包工头,Resource Manager 相当于经理。Resource Manager 首先将任务给Application master,然后Application master 在将Resource manager的指示传达给各个 nodemanager(相当于工人)进行干活儿。每个application只有一个Applicationmaster,运行在node manager节点,Application master是由Resource manager指派的。
> job:一个mapper、一个Reducer或一个进程的输入列表。job也可以叫做Application。
> task:一个具体做mapper或Reducer的独立的工作单元。task运行在nodemanager 的Container中。
> client:一个提交给Resource manager的一个Application程序。
已经知道了YARN由哪些工作单元组成,接下来就来说说一个job时如何进行处理的整体流程。
用户向YARN中提交程序/作业,其中包括Application Master启动、ApplicationMaster的命令及用户程序等;ResourceManager为作业分配第一个Container,并与对应的nodemanager通信,要求它在这个Container中启动改作业的Application master;Applicationmaster首先向Resourcemaster注册,这样用户可以直接通过Resourcemanager查询作业的运行状态,然后它将为各个人物申请资源并监控任务的运行状态,知道运行结束;Application通过RPC请求向Resourcemanager申请和领取资源。
然后Applicationmaster 要求指定的nodemanager 节点启动任务。
启动之后,去干Resource Manager 指定的map tesk。
等Map task干完之后,通知application master。然后application master 去告知resouce manager。接下来Resource manager 分配新的资源给application master,让它找人干其它的活儿。
接下来Application master 通知nodemanager启动新的Container准备干活儿。该活儿的输入是map task结束的输出。
开始干Reduce Task任务。
等各个节点上的Reduce task 都干完了,将干活儿的nodemanager的任务结果进行同步。做最后的reduce任务。
等都计算完了,最后将最终的结果输出到hdfs。任务完成。
通过图解可以更清楚的了解整个 YARN的工作流程。