文章翻译自http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html
文章目录
关于YARN最基本的想法是将 资源管理的功能与 作业的调度,监控的功能拆分成不同的进程服务。进一步地,就是拥有一个全局的 ResourceManager(资源管理器,RM) 和 应用程序级别的ApplicationMaster(AM,每个应用程序拥有一个) 。
一个应用程序(无论是Hadoop应用程序还是Spark应用程序)或就是一个单一job,或是由多个jobs组成的有向无环图(DAG)
ResourceManager和NodeManager构成了数据计算的框架。
ResourceManager,RM
拥有最终权限,可以在系统中的所有应用程序之间做出资源仲裁。
有两个主要的组件
- Scheduler
- ApplicationsManager(注意AppsMngr是用来管理多个应用程序Applications)
Scheduler
负责分配各种资源给这种正在运行的Applications,服从于容量、队列的限制。
该调度器是纯净的调度器,意味着它不监控应用程序,也不获取应用程序的状态信息。
同时,调度器也无法保证能够重新启动失败的任务,因为任务所在的应用程序可能本身就已经挂掉了,或者硬件出现故障。
调度器是根据应用程序对资源的需求来进行调度,调度器是基于Container的抽象概念。Container中包含了内存,cpu,磁盘,网络等元素。
调度器有一个可插拔的策略,用来在各种队列、应用程序间对集群资源进行分区。目前的调度器如CapacityScheduler和FairScheduler等都是可插拔策略的实例。
ApplicationsManager,AppsMngr
负责接收作业的提交,与第一个Container进行协调,在第一个Container中执行特定Application的AppMstr,并且提供服务,能够在失败的时候重启AppMstr的Container。
ApplicationMaster(每个Application都只拥有一个)负责从Scheduler中协调合适的资源Container,跟踪Container的状态,监控作业进度。
NodeManager,NM
是机器级别的框架代理(每个工作节点拥有一个NM),负责创建、管理节点中的容器,监控自身的资源使用情况(cpu,内存,磁盘,网络),也将这些情况汇报给RM(中的调度器Scheduler)。Container负责执行AppMstr指定的任务。
Health Checker Service
NodeManager运行服务以确定其正在执行的节点的运行状况。
这些服务会对磁盘以及任何用户指定的测试执行检查。如果任何运行状况检查失败,NodeManager会将该节点标记为运行状况不佳并将其传达给RM,然后RM会停止向该节点分配Container。
节点状态的通信是作为NodeManager和ResourceManager之间的心跳的一部分完成的。磁盘检查程序和健康 状况监视器运行的时间间隔不会影响心跳间隔。
当心跳发生时,使用这两个检查的状态来决定节点的健康状况。
ApplicationMaster,AppMstr
实际上是特定于框架的库,任务是协调来自RM的资源,并且与NM一起执行与监控task。
其他
Hadoop2.x版本中的MapReduce维持着与hadoop1.x版本的API兼容性。这意味着所有的MapReduce作业只要重新编译过就能在YARN上运行。
ReservationSystem
YARN通过ReservationSystem,使得能够支持 resource reservation(资源预留) 。
ReservationSystem是YARN中的一个组件,允许用户指定一个资源随时间变化以及时间限制的大概轮廓,并且通过resource reservation来确保重要作业的能够被可以预料到地执行。
ReservationSystem能够随时间追踪资源,对资源的预留执行准入控制,并动态指示下级的调度器来确保预留动作能够被执行。
Federation
为了将YARN扩展到超过几千个节点,YARN 通过YARN Federation功能支持 Federation 的概念。
联邦能够通过连接多个YARN集群(子集群),让他们看起来向一个巨大的单一集群。
这样可以用于实现更大规模的集群,允许多个独立集群合作完成更大的作业,或者提供给具有跨所有集群的权限的租户。