Apache Hadoop YARN
YARN 的基本想法是将resource management
和 job scheduling/monitoring
拆分为单独的守护进程。该想法是拥有一个全局的ResourceManager (RM)
,和每个应用的ApplicationMaster (AM)
。应用可以是单个作业,也可以是一组作业。
ResourceManager 和 NodeManager 构成了数据计算框架。ResourceManager 是负责系统内所有应用的资源调度。NodeManager 是每台机器的框架客户端/代理,负责容器管理,监控他们的资源使用 (cpu, memory, disk, network),并汇报给ResourceManager/Scheduler。
每个应用的ApplicationMaster实际上是一个框架特定库,其任务是与ResourceManager 协商资源,并与NodeManager(s)配合执行和监控任务。
ResourceManager有两个主要组件:Scheduler and ApplicationsManager。
Scheduler负责分配资源给各运行的应用,这些应用常受约束于容量、队列等。Scheduler是纯调度程序,不负责监控和跟踪应用。另外,它不保证重启失败的任务,不管是因为应用故障还是硬件故障。Scheduler根据应用的资源需求来执行调度功能;它基于一个抽象的概念resource Container
来实现,它包含了memory, cpu, disk, network 等元素。
Scheduler有一个可插拔策略,负责再各种队列、应用等之间对集群资源分区。 当前的schedulers
比如 CapacityScheduler 和 FairScheduler 就是插件的范例。
ApplicationsManager负责接受任务提交,协商用于执行应用特定ApplicationMaster的第一个容器,并提供在失败时重启ApplicationMaster容器的服务。每个应用的ApplicationMaster都要负责跟Scheduler协商合适的资源容器,跟踪它们的状态并监视进度。
MapReduce在hadoop-2.x
维持了与先前稳定版本hadoop-1.x
的API 兼容行。这意味着所有MapReduce只需要重新编译就可以在YARN上保持不变的运行。
YARN 支持资源预留(resource reservation)的概念,通过ReservationSystem实现。ReservationSystem允许用户以资源配置文件指定某时间或时间限制内(比如,截止日期)的资源,并预留资源以确保重要作业按计划执行。ReservationSystem实时跟踪资源,对预留进行准入控制,并动态地指示底层调度程序确保预留已满。
为了支持YARN在数千个节点上的扩展,YARN 支持联盟 Federation的概念,通过 YARN Federation 特性。聚合允许将多个yarn (sub-)clusters透明的聚合在一起,看起来像一个独立的大型集群。这些可以用于实现更大规模的扩展,或者允许多个独立集群一起工作来执行大型任务,或提供给在这些集群上都有容量的租户使用。