前面学习了第一代的MR,今天开始学习一下YARN,MR部分的源码以及常用的几个demo(join,二次排序,自定义inputfomat等)会在以后的博客中介绍,相关的优化也会在其中实现,该分析应该会在学习完大部分hadoop生态圈后进行深入的学习。下面开始正题:
MapReduce在hadoop-0.23中已经进行了升级,这个升级被我们成为MapReduce 2.0 (MRv2)或者是YARN。
MRv2的基本思路就是将原来的JobTracker分成两个部分:资源管理进程和job调控监控进程。这个改变会产生一个全局的ResourceManager (RM)和为每一个应用产生一个ApplicationMaster (AM)。其中的应用可以是一个典型的MR job也可以是一个DAG。
ResourceManager 和每一个Slave节点,NodeManager形成了一个数据计算框架。ResourceManager决定了系统中所有资源的调配。
每一个应用的ApplicationMaster负责与ResourceManager谈判获取资源并且和NodeManager一起去执行监控任务的。
ResourceManager包括两个主要组件:Scheduler 和ApplicationsManager
Scheduler是负责分配资源给各种的应用,包括容量和队列等。他只是一个调度器,不会监控跟踪应用的状态。另外他不保证重启因为应用运行失败或者硬件失败的任务。Scheduler调度功能是基于应用的资源需求的。它基于resourceContainer的抽象,它包含元素,如内存、cpu、磁盘、网络等等。在第一个版本中,只有内存被支持。
Scheduler采用插件式管理,负责在众多队列和应用中分隔资源。当前Map-Reduce调度器比如CapacityScheduler 和FairScheduler可以作为例子。
CapacityScheduler支持hierarchical queues,允许具有预见性的集群资源共享。
ApplicationsManager负责接受提交的job,决定执行程序应用的第一个容器为ApplicationsManager,并且提供失败后的服务重启功能
NodeManager负责每个节点上的资源管理,负责向ResourceManager/Scheduler报告containers的状态和监控资源使用情况,这些也将想RM汇报。
每一个应用的ApplicationMaster都要负责和Scheduler协商获取资源,跟踪监控内部运行的状态。
MRV2 具有版本兼容性,之前所有的Map-Reduce还是可以在MRv2 运行,只需要重新编译一下
细节可以参考:http://hortonworks.com/hadoop/yarn/