从Hadoop的0.23版本,MapReduce进行了全面的彻底的变革,也就是我们今天看到的MapReduce 2.0或者我们也可以叫它YARN.
老版本的JobTracker有两个主要的功能:资源管理、任务调度与监控。Yarn的思路就是把这两个功能进行拆分,分别交给两个独立进程进行维护。这两个进程分别是ResourceManager进程和ApplicationMaster进程。ApplicationMaster进程是每个Job一个。
RM和NM两种角色构成了Hadoop集群的计算框架。RM对所有Job的资源申请具有最终的决定权。
ApplicationMaster进程负责从RM获得资源,并与NM一起执行监控tasks.
RM有两个主要的组件:Sheduler、ApplicationManager
Sheduler负责给运行的程序分配资源(存储容量、队列等)。Sheduler只管调度,不管应用程序的状态。即便是应用程序因为种种原因失败了,也和他没有关系。Sheduler根据每个程序对资源的申请来进行调度。resourceContainer是一个新抽象的概念,它是内存、CPU、磁盘、网络等资源的抽象集合,第一版只支持了内存。Sheduler以resourceContainer为单位进行资源分配。
Scheduler在设计上采用了插件的策略,CapacityScheduler 和FairScheduler
就是Scheduler的两个插件。类似于Eclipse,扩展起来容易吧?
CapacityScheduler 支持分层次队列,该功能使得它可以分配更多的集群资源(分配那些未来会被释放的资源)
ApplicationsManager 负责接收提交的任务,找到执行任务的ApplicationMaster
的容器,在容器失败的情况下,对容器进行重启。
NodeManager 是个客户端程序,提供ApplicationsManager
运行需要的容器,并对所在机器的资源(CPU、内存、磁盘、网络)进行监控,并把监控结果汇报给 ResourceManager/Scheduler.
ApplicationMaster 从Scheduler获得资源,跟踪任务的状态和执行进度。
MRV2与老版本的稳定版的MR保持兼容,老版本的MR程序重新编译一下在新的集群中就可以运行了。