YARN机制

YARN是资源管理调度的机制,以前一直以来和MapReduce机制合在一块儿,以后才分开。正是由于YARN机制单独独立出来,才使得Hadoop框架更加具备普适性。MapReduce能够处理海量离线数据,一样若是处理实时数据,换成Spark,Storm便可,不用从新部署集群,由于资源管理调度YARN是共用的。html

当提交一个job,YARN的资源调度以下图所示:算法

 

YARN有两个比较重要的组成,Resource Manager和Node Manager,执行hadoop jar cn.darren.hadoop.mr.wordcount.WCRunner这条指令以后,会产生一个RunJar的进程,向RM申请资源,RM会返回job相关资源提交的路径和本Job产生的ID。进而RunJar提交资源到staging-dir路径下面,这在HDFS中,提交完向RM汇报提交结果。RM会将本job加入任务队列,其中RM和NM之间采用“心跳机制”,NM若是以为本身有空闲,就能够去RM的任务队列领取任务。Node Manager接收到分配任务后,会分配运行的资源容器,有点相似于虚拟机,包括文件资源、CPU资源、内存资源等,业务是在里面跑的。可是YARN并不能启动MapReduce内部的逻辑,因此这时候会启动MRAppMaster,这是用来操做MapReduce的,而后它就会向RM进行注册,好比在哪一个节点运行,什么标识等等,一样也会请求一些信息,好比分配的资源都在哪些节点上。而后MRAppMaster就会启动map任务进程,启动起来的进程叫作yarnChild,map执行完以后,会启动Reduce任务进程。MRAppMaster当job执行完后,会向RM注销本身。(map task和yarn task都叫作yarnChild)网络

总结一下:框架

在YARN框架中,起监控做用的是Resource Manager,用来监控Node Manager,它们都是节点,也就是进程。oop

在MapReduce框架中,起监控做用的是MRAppMaster,用来监控yarnChild,它们都是动态产生的进程。spa

 

YARN提交job的源码流程如图所示:code

最后,将YARN机制的整个运行过程用一张图做为总结,能够看清其总的流程:

 

在yarn中有以下几个概念:orm

  • ResourceManager
  • NodeManager
  • Secheduler
  • ApplicationManager
  • MRAppMaster
  • Container

ResourceManager和NodeManager对应实体的物理节点,分别映射到yarn的主节点和计算节点。htm

一、ResourceManager

ResourceManager节点的功能由Secheduler和ApplicationManager协调完成。blog

其中ApplicationManager职责以下

  1. 负责接收客户端提交的job
  2. 判断启动该job的MRAppMaster所需的资源
  3. 监控MRAppMaster的状态,在其失败的时候重启MRAppMaster

Secheduler负责仅仅提供一个调度算法调度ApplicationManager提交的任务,他不提供失败重启和任何监控功能。调度算法能够自定义。yarn针对不一样的场景提供了三种Secheduler实现:FIFO Scheduler ,Capacity scheduler,Fair Scheduler(请参照调度器详解)。

二、NodeManager

NodeManager对应集群中的计算节点,可是他的功能仅仅只是抽象本节点的资源(如cpu,内存,磁盘,网络)而且定时向ResourceManager的Secheduler汇报。

Container是一组资源的集合,一个container通常用来执行一个task。

MRAppMaster是job的生命周期的管理者,负责整个job执行过程的监控。

前面提到ApplicationManager会判断启动MRAppMaster所需的资源,以后提交给Secheduler,Secheduler将这些资源封装成一个Container,而后根据调度算法在某一个NodeManager上启动MRAppMaster(固然它会消耗掉该NodeManager的资源)。

MRAppMaster启动以后会计算job所须要的资源,而且向Secheduler申请这些资源,NodeManager分配完成这些任务的container以后,会由MRAppMaster来监控这些container的状态,若是失败就回收资源从新申请,若是成功就释放资源,当任务执行完成以后汇报Secheduler,Secheduler回收资源而且向ResourceManager返回执行结果,整个任务处理完毕。

相关文章
相关标签/搜索