yarn主要作用
YARN 的基本设计思想是将MapReduce V1 中的JobTracker 拆分为两个独立的服务:ResourceManager 和ApplicationMaster。ResourceManager 负责整个系统的资源管理和分配,ApplicationMaster 负责单个应用程序的的管理。
yarn的结构
yarn总体上是master/slave结构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件组成。
- 2.1 RM
RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由两个部分组成:调度器(Scheduler)和应用程序管理器(Application Manager)。
调度器根据容量、队列等限制条件,将系统中的资源分配给正在运行的应用程序,在保证容量、公平性和服务等级的前提下,优化集群资源利用率,让所有的资源都被充分利用。
应用程序管理器负责管理整个系统中的所有的应用程序,包括应用程序的提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重启它。 - 2.2 AppMaster
用户提交的一个应用程序会对应于一个ApplicationMaster,它的主要功能有:
- a.与RM 调度器协商以获得资源,资源以Container 表示。
- b.将得到的任务进一步分配给内部的任务。
- c.与NM 通信以启动/停止任务。
- d.监控所有的内部任务状态,并在任务运行失败的时候重新为任务申请资源以重启任务。
- 2.3 NodeManager
NodeManager 是每个节点上的资源和任务管理器,一方面,它会定期地向RM 汇报本节点上的资源使用情况和各个Container 的运行状态;另一方面,他接收并处理来自AM 的Container 启动和停止请求。 - 2.4 Container
Yarn中的资源抽象,它封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络等。AppMaster向NodeManager申请资源的时候,资源是以container的形式表示的。一个应用程序会分配一个Container,这个应用程序只能使用这个Container 中描述的资源。不同于MapReduceV1 中槽位slot 的资源封装,Container 是一个动态资源的划分单位,更能充分利用资源。
3,yarn的工作流程
4 yarn的调度器
4.1 FIFO Scheduler(队列调度器)
按任务提交的顺序排成一个队列,这是一个先进先出队列。在进行资源分配的时候,先给队列中最头上的任务分配资源,然后再分配给下一个。这是最简单也是最容易理解的调度器,但是它不适用与共享集群,大的任务会占用所有的集群资源,这就导致其它任务被阻塞。
4.2 Capacity Scheduler(容量调度器)
Capacity调度器允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式为多个组织提供服务了。除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源,在一个队列的内部,资源的调度采用的是先进先出策略。
4.3 Fair Scheduler(公平调度器)
5 YARN高可用
YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 ResourceManager 不像 NameNode ,没有那么多的元数据信息需要维护,所以它的状态信息可以直接写到 Zookeeper 上,并依赖 Zookeeper 来进行主备选举。