Apache Yarn(Yet Another Resource Negotiator)是hadoop的集群资源管理器系统,Yarn从hadoop 2.0开始引入,最初是为了改善Map Reduce的实现,但是它具有通用性,同样执行其他分布式计算模式。
Yarn很好解决了MapReduce1.0中的局限性,所以针对MapReduce1.0,Yarn就有了如下特点:
- 支持非MapReduce应用的需求
- 可扩展性
- 提高资源是用率
- 用户敏捷性
- 可以通过搭建为高可用
Yarn从整体上还是属于master/slave模型,主要依赖于三个组件来实现功能,ResourceManager,NodeManager和ApplicationMaster。
- ResourceManager,拥有系统所有资源分配的决定权,拥有集群资源主要、全局视图。主要职责在于调度,即在竞争的应用程序之间分配系统中的可用资源,是集群资源的仲裁者。
- NodeManager是Yarn节点的一个“工作进程”代理,管理hadoop集群中独立的计算节点,主要负责与ResourceManager通信,负责启动和管理应用程序的container的生命周期,监控它们的资源使用情况(cpu和内存),跟踪节点的监控状态,管理日志等,并报告给ResourceManager。
- ApplicationMaster 负责与scheduler协商合适的container,跟踪应用程序的状态,以及监控它们的进度,ApplicationMaster是协调集群中应用程序执行的进程。
(1)Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。
Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。
Yarn的工作流程
-
用户使用客户端向 ResourceManager 提交一个任务,同时指定提交到哪个队列和需要多少资源。用户可以通过每个计算引擎的对应参数设置,如果没有特别指定,则使用默认设置。
-
ResourceManager 在收到任务提交的请求后,先根据资源和队列是否满足要求选择一个 NodeManager,通知它启动一个特殊的 container,称为 ApplicationMaster,后续流程由它发起。
-
ApplicationMaster向 ResourceManager 注册后根据自己任务的需要,向 ResourceManager 申请 container,包括数量、所需资源量、所在位置等因素。
-
如果队列有足够资源, ResourceManager 会将 container 分配给有足够剩余资源的 NodeManager,由 ApplicationMaster 通知NodeManager 启动 container。
-
container 启动后执行具体的任务,处理分给自己的数据。NodeManager除了负责启动 container,还负责监控它的资源使用状况以及是否失败退出等工作,如果 container 实际使用的内存超过申请时指定的内存,会将其杀死,保证其他 container 能正常运行。
-
各个 container 向ApplicationMaster汇报自己的进度,都完成后,ApplicationMaster向 ResourceManager注销任务并退出, ResourceManager 通知NodeManager 杀死对应的 container,任务结束。