Yarn架构设计

yarn一个基本理念就是将JobTracker的两大主要功能——资源管理和作业调度/监控——分割开来成为两个独立的守护进程。在这个方案里,有一个全局的ResourceManager (RM)和对应每个应用的ApplicationMaster (AM)。一个应用可以是一个独立作业,也可以是多个作业构成的DAG(有向无环图,Directed Acyclic Graph)。

ResourceManager和NodeManager(NM)一起构成了整个数据计算框架。ResourceManager是系统上全部应用所需资源的最终决策者。NodeManager则是每台机器上的框架代理,负责这台机器上的所有容器。NodeManager监控一台机器上的所有容器对资源(CPU、内存、硬盘、网络)的使用,并将之上报给ResourceManager和Scheduler。

每个应用的ApplicationMaster实际上是一个具体的框架库。它的任务是负责与ResourceManager协商获取资源,以及与NodeManager合作实现task的执行与监控。

yarn_architecture

ResourceManager有两个主要组件:Scheduler(调度器)和ApplicationManager。

Scheduler根据容量、队列等常见的约束,将系统资源分配给正在运行的各种应用。这里的Scheduler是一个纯粹意义上的调度器:它不再对应用的状态进行监控和跟踪,也不保证重启因应用错误或硬件故障导致失败的任务。Scheduler基于应用对资源的需求执行调度功能。这是基于一个抽象的概念“资源容器(Container)”实现的。资源容器将内存、CPU、硬盘和网络等元素组合在一起支持对任务的资源分配。

Scheduler支持一种插件策略,可以将集群中资源分配给多个队列和应用。当前的Scheduler,如Capacity Scheduler和Fair Scheduler,均可视为该策略的实现。

CapacityScheduler支持hierarchical queues(分层队列),这为更准确的集群资源共享提供了可能。

Container中封装了机器资源,如内存,CPU, 磁盘,网络等,每个任务会被分配一个容器,该任务只能在该容器中执行,并使用该容器封装的资源。

ApplicationsManager负责接收作业提交,将应用程序分配给具体的ApplicationMaster,并负责重启失败的ApplicationMaster。每个应用的ApplicationMaster负责和Scheduler谈判获取资源容器,并跟踪资源容器的状态监控他们的进程。

MRv2为历史稳定版本(hadoop-1.x)提供了兼容API (API compatibility )。这意味着所有MapReduce作业不需要更改,只要重新编译一次就仍可以在MRv2上运行。


发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据