RM包含两大组件:调度器(Scheduler)和应用管理器(ApplicationsManager,注意与AM的区别)。
调度器负责根据一些常见的约束如容量、队列等,为各类运行的应用程序分配资源。调度器是一个纯粹的调度器,并不负责应用的监控或者状态追踪,也不保证由于应用错误或者硬件故障导致任务失败后会重启任务。调度器基于应用的资源请求进行调度,资源被抽象为Container,每个Container包含内存、CPU、硬盘、网络等元素。而在MRv1中资源调度只考虑到内存。
调度器支持plug-in策略,你可以在不同的队列和应用中使用不同的调度策略。例如CapacityScheduler和FairScheduler。CapacityScheduler支持分级队列以支持预判式集群资源共享。
应用管理器负责接受作业提交、为运行应用的AM,与调度器协调第一个Container,监控AM运行状态,并负责在故障时重启AM Container。??
NM是每台机器上的框架代理,负责管理Container,监控它们的资源使用情况,并将这些信息报告给RM/调度器。
每个应用的AM负责与调度器协调合适的containers,并追踪它们的状态和监控进展。
MRv2兼容之前稳定版本(hadoop-0.20.205)的API。这意味着所有的Map-Reduce作业只需要重新编译就可以不用修改的重新运行在MRv2上。
董西成:《hadoop技术内幕:深入解析YARN架构设计与实现原理》
董大神博客:http://dongxicheng.org/
里面非常多最新的MapReduce信息,受益匪浅。
YARN工作流程
当用户向YARN提交一个应用程序后,YARN将分两个阶段运行该应用程序:
第一个阶段,启动AM;
第二个阶段,AM创建和运行应用程序,为每个任务申请资源,监控应用程序的运行过程,直到完成。
YARN的工作流程分为以下几个步骤:
(1)用户向YARN提交应用程序,包括AM程序、启动AM的命令、用户程序等;
(2)RM为应用程序分配第一个Container,并与对应的NM通信,要求NM在Container中启动该应用程序的AM;
(3)AM首先向RM注册,这样用户可直接通过RM查看应用程序的运行状态,然后AM为各个任务申请资源,监控运行状态直到结束,即重复步骤(4)-(7);
(4)AM采用轮询方式,通过RPC协议向RM申请和领取资源;
(5)AM申请资源成功后,与对应NM通信,要求启动任务;
(6)NM为任务设置运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;
(7)各个任务通过某个RPC协议向AM报告自己的状态和进度,使得AM可以随时监控任务的运行状态,在任务失败时可重新启动任务;
(8)应用程序运行完成后,AM向RM注销并关闭自己。