@changedi
2017-04-26T13:03:15.000000Z
字数 1282
阅读 1752
大数据
YARN
原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-yarn/hadoop-yarn-site/YARN.html
MapReduce在hadoop-0.23中经历了完整的革新,也就是引入了MapReduce 2.0(MRv2),俗称YARN。
MRv2的核心思想是将原来JobTracker的两个主要功能拆分,也就是将资源管理(resource management)和调度与监控(scheduling/monitoring)分离为两个daemon进程。其思想表现为持有一个全局的ResourceManager(RM)以及每个应用有一个ApplicationMaster(AM)。一个应用对应一个传统的MR作业或者一个作业组DAG。
ResourceManager和每个slave节点的NodeManager(NM)构成了数据计算框架。ResourceManager是全局总控,负责分配仲裁系统中作业的资源。
ApplicationMaster是每个应用作业一个,它事实上是一个框架相关的lib库,被用来和ResourceManager协调资源以及与NodeManager协同工作来执行和监控任务。
ResourceManager有两个主要组件:调度器Scheduler和应用管理器ApplicationsManager。
调度器Scheduler负责给每个不同的运行中的作业分配资源,使其满足容量约束和队列约束等。Scheduler是纯粹的调度器,不做任何应用的监控和状态跟踪。同理,也不保证失败任务的重启,无论是应用程序错误还是硬件错误。调度器根据应用作业的资源需求来完成调度;它基于抽象的资源容器来工作,抽象资源包括内存、cpu、磁盘、网络等等。在第一个版本中,只支持内存。
调度器有一个可插拔的策略插件,它负责在不同队列和应用作业中划分集群资源。当前的MapReduce调度器例如CapacityScheduler和FairScheduler就是类似的插件。
CapacityScheduler支持层级队列从而允许更多可预测的集群资源共享。
ApplicationsManager负责接受作业提交,同时负责协商用来执行ApplicationMaster相关的应用程序的容器,还提供服务来支持在失败时重启ApplicationMaster容器。
NodeManager是每台机器上的框架agent,它负责支持容器,监控资源使用情况(cpu、内存、磁盘和网络)以及把这些情况报告给ResourceManager和Scheduler。
ApplicationMaster也负责从Scheduler协调合适的资源容器,同时跟踪它们的状态和监控它们的过程。
MRv2保持了与hadoop-1.x的API兼容性。这意味着所有的MapReduce作业都可以不做变更的运行在YARN上,要做的事情只有一次重新编译而已。