Yarn是Hadoop2中为了缓解MapRedurce工作压力,让其专心与数据的分析而添加的新模块,负责任务的调度和资源的管理,其工作流程如下图:

Hadoop Yarn工作流程

Resource Manager:(总管)

处理客户请求;

启动/监控Application Master;

监控Node Manager;

资源分配与调度;


Node Manager:(每个节点,即机器的管理员)
单个节点上的资源管理;

处理来自Resource Manager和Application Master的命令;


Application Master:(对任务管理)

数据切分;

为应用程序申请资源并配合分配给内部任务;

任务监管与容错;


Container:(环境,容器)

对任务运行环境的抽象,封装了CPU内存等多维资源以及环境变量,启动命令等任务运行相关信息;

对照图中的步骤:

  1. 用户向Yarn中提交应用程序,也就是一系列需要完成的任务,其中包括Application Master(对这个任务负责)程序,启动Application Master的命令,用户程序等;
  2. Resource Manager为该应用程序分配一个Container(目前还没有分配其中的内容)并与对应的Node Manager通信,要求它在这个Container中启动应用程序的Application Master;
  3. Application Master首先向Resource Manager注册,这样用户可以直接通过Resource Manager查看应用程序运行的状态;然后它将为各个任务申请资源,并监控它的运行状态,直到结束,即重复4~7,需要注意的是,这里因为Application Master会将应用程序分成多个任务,因此为多个任务申请的资源不一定在同一台机器上,所以在步骤5中会有分支指向其他Node Manager;
  4. Application Master采用轮询的方式通过RPC协议向Resource Manager申请和领取资源,Resource Scheduler将CPU,内存,磁盘封装成Container(不一定都在同一个节点下)发给Application Master;
  5. 一旦Application Master申请到资源后,便于对应的Node Manager(不一定是同一个)通信,要求它启动任务,并传递资源;
  6. Node Manager为任务设置好运行环境(包括环境变量,JAR包,二进制程序等)后,将任务启动命令写到一个脚本(Map Task/Reduce Task)中去,并运行该脚本任务,这里才真正的开始执行任务;
  7. 各个任务通过某个RPC协议向Application Master汇报自己的状态和进度(不同的Node Manager下的同一个任务的片段会向相同的Application Master汇报),以让Application Master随时掌握各个任务的运行状态,从而可以在任务失败的时候重启任务(在任务运行的过程中,用户可以随时通过RPC协议向Application Master查询应用程序当前的运行状态);
  8. 应用程序运行完成后,Application Master向Resource Manager注销并关闭自己。

相关文章: