0%

Yarn 认识

Apache Hadoop YARN 是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度


前言

Yarn 在 Hadoop 生态圈中起到一个资源调度的作用,全文摘自以下链接拼凑出来

出身

Hadoop1.x 中 JobTracker 具有两种不同的职责

  1. ResourceManagement 资源管理
  2. JobScheduling/JobMonitoring 任务调度监控

为单个进程安排大量职责会导致重大的可伸缩性问题,尤其是在较大的集群上,JobTracker 必须不断跟踪数千个 TaskTracker、数百个作业,以及数万个 map 和 reduce 任务。
相反,TaskTracker 通常近运行十来个任务,这些任务由勤勉的 JobTracker 分配给它们。

大型 Apache Hadoop 集群 (MRv1) 上繁忙的 JobTracker

Hadoop2.x Yarn 的目标是将这两部分功能分开,也就是分别用两个进程来管理这两个任务

  1. ResourceManger
  2. ApplicationMaster

需要注意的是,在Yarn中把 job 的概念换成了 application

组件

  1. ResourceManager:Global(全局)的进程
  2. NodeManager:运行在每个节点上的进程
  3. ApplicationMaster:Application-specific(应用级别)的进程
  4. Scheduler:是ResourceManager的一个组件
  5. Container:节点上一组CPU和内存资源

Container是Yarn对计算机计算资源的抽象,它其实就是一组CPU和内存资源,所有的应用都会运行在Container中。ApplicationMaster是对运行在Yarn中某个应用的抽象,它其实就是某个类型应用的实例,ApplicationMaster是应用级别的,它的主要功能就是向 ResourceManager(全局的)申请计算资源(Containers)并且和 NodeManager 交互来执行和监控具体的task。Scheduler是ResourceManager专门进行资源管理的一个组件,负责分配NodeManager上的Container资源,NodeManager也会不断发送自己Container使用情况给ResourceManager

各组件详解翻阅开头推荐链接

提交作业

Application 在 Yarn 中的执行过程,整个执行过程可以总结为三步

  1. 应用程序提交
  2. 启动应用的ApplicationMaster实例
  3. ApplicationMaster实例管理应用程序的执行

  1. 客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例

  2. ResourceManager找到可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例

  3. ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了

  4. 在平常的操作过程中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求

  5. 当Container被分配之后,ApplicationMaster请求被分配到的 NodeManager 启动Container ,启动成功后 ,ApplicationMaster 向NodeManager发送container-launch-specification信息来启动Container, container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料

  6. 应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster

  7. 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议

  8. 一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统

Resource Request 和 Container

ApplicationMaster 资源请求以 resource-request 的形式发送给 ResourceManager 的 Scheduler,
Scheduler 在这个原始的 resource-request 中返回分配到的资源描述Container

包含的字段信息如下

1
<resource-name, priority, resource-requirement, number-of-containers>
  • resource-name:资源名称,现阶段指的是资源所在的host和rack,后期可能还会支持虚拟机或者更复杂的网络结构
  • priority:资源的优先级
  • resource-requirement:资源的具体需求,现阶段指内存和cpu需求的数量
  • number-of-containers:满足需求的Container的集合

number-of-containers中的Containers就是ResourceManager给ApplicationMaster分配资源的结果。Container就是授权给应用程序可以使用某个节点机器上CPU和内存的数量。

ApplicationMaster在得到这些Containers后,还需要与分配Container所在机器上的NodeManager交互来启动Container并运行相关任务。当然Container的分配是需要认证的,以防止ApplicationMaster自己去请求集群资源。

有些提到了还有位置字段。。。 这个看来有说法,有空再看看源码之类的确认下。。