Yarn是Hadoop2中为了缓解MapRedurce工作压力,让其专心与数据的分析而添加的新模块,负责任务的调度和资源的管理,其工作流程如下图:
Resource Manager:(总管)
处理客户请求;
启动/监控Application Master;
监控Node Manager;
资源分配与调度;
Node Manager:(每个节点,即机器的管理员)
单个节点上的资源管理;
处理来自Resource Manager和Application Master的命令;
Application Master:(对任务管理)
数据切分;
为应用程序申请资源并配合分配给内部任务;
任务监管与容错;
Container:(环境,容器)
对任务运行环境的抽象,封装了CPU内存等多维资源以及环境变量,启动命令等任务运行相关信息;
对照图中的步骤:
- 用户向Yarn中提交应用程序,也就是一系列需要完成的任务,其中包括Application Master(对这个任务负责)程序,启动Application Master的命令,用户程序等;
- Resource Manager为该应用程序分配一个Container(目前还没有分配其中的内容)并与对应的Node Manager通信,要求它在这个Container中启动应用程序的Application Master;
- Application Master首先向Resource Manager注册,这样用户可以直接通过Resource Manager查看应用程序运行的状态;然后它将为各个任务申请资源,并监控它的运行状态,直到结束,即重复4~7,需要注意的是,这里因为Application Master会将应用程序分成多个任务,因此为多个任务申请的资源不一定在同一台机器上,所以在步骤5中会有分支指向其他Node Manager;
- Application Master采用轮询的方式通过RPC协议向Resource Manager申请和领取资源,Resource Scheduler将CPU,内存,磁盘封装成Container(不一定都在同一个节点下)发给Application Master;
- 一旦Application Master申请到资源后,便于对应的Node Manager(不一定是同一个)通信,要求它启动任务,并传递资源;
- Node Manager为任务设置好运行环境(包括环境变量,JAR包,二进制程序等)后,将任务启动命令写到一个脚本(Map Task/Reduce Task)中去,并运行该脚本任务,这里才真正的开始执行任务;
- 各个任务通过某个RPC协议向Application Master汇报自己的状态和进度(不同的Node Manager下的同一个任务的片段会向相同的Application Master汇报),以让Application Master随时掌握各个任务的运行状态,从而可以在任务失败的时候重启任务(在任务运行的过程中,用户可以随时通过RPC协议向Application Master查询应用程序当前的运行状态);
- 应用程序运行完成后,Application Master向Resource Manager注销并关闭自己。