YARN的运行原理

 

 

1、YARN的基本概述

Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器,它是一个通用资源管理系统和调度平台, 可为上层应用提供统一的资源管理和调度。它的出现解决了旧版本MapReduce的很多问题,保障了Hadoop框架的健康运行。

 

2、YARN的组织架构

YARN的核心思想是资源动态分配,适用于多种计算框架。在一代MapReduce中,JobTracker的功能是资源管理和作业调用。而在YARN中这两项功能分别被ResourceManager和ApplicationMaster来代替。其中ResourceManager进程负责完成整个集群的资源管理和资源调度,ApplicationMaster进程负责应用程序的相关事务,比如任务调度、任务监控等。如图所示:

 

image

 

(1)ResourceManager进程

ResourceManager主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Application Manager)。注意ApplicationManager是属于ResourceManager,相当于所有应用程序的大管家!

(2)Scheduler进程

Scheduler调度器根据应用程序的资源要求,以及集群机器的资源情况,为用程序分配封装在Container中的资源。Scheduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。

(3)ApplicationManager进程

ApplicationManager负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。

(4)NodeManager进程

NodeManager进程是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自ApplicationMaster的Container启动/停止等请求。

(5)ApplicationMaster框架

用户提交的应用程序均包含一个ApplicationMaster,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责ResouceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。

(6)Container资源

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。当ApplicationMaster向ResourceManager申请资源时,ResourceManager为ApplicationMaster返回的资源便是用Container表示的。

 

3、YARN的工作流程

工作流程图如下:

image

 

工作流程如下:

1、用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster命令和用户程序等。

2、ResourceManager为该应用程序分配第一个Container,并与Container对应的NodeManager通信,并且由NodeManager在这个Container中启动对应的ApplicationMaster。

3、ApplicationMaster会在ResourceManager中进行注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束。

4、ApplicationMaster采用的是轮询方式,通过RPC协议向ResourceManager申请和领取资源。

5、当ApplicationMaster申请到资源后,便与申请到的Container所对应的Nodemanager通信,要求它在Container中启动任务。

6、NodeManager为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

7、各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

8、应用程序运行完成后,ApplicationMaster通过和resourceManager进行通信,要求注销并关闭自己。

 

4、YARN的调度方式

关于集群的调度方式,很难有一个很完美的方案可以应用于所有场景。所以YARN提供了三种调度器供我们选择,分别是FIFO Scheduler ,Capacity Scheduler,FairScheduler。

 

image

 

(1)FIFO Scheduler

FIFO调度器把应用按提交的顺序排成一个队列,这是一个先进先出队列。在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。属于默认配置。其缺点就是小任务会被大任务阻塞。

(2)Capacity Scheduler

Capacity调度器,有一个专门的队列用来运行小任务,队列资源进行隔离。缺点是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。

(3)Fair Scheduler

Fair调度器会为所有运行的job动态的调整系统资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。缺点是小任务的介入占用一半资源,在这段时间内对大任务的运行速度影响很大。

 

5、YARN的优点

与旧版的MapReduce框架比较,其具有以下优点:

1.解决了NameNode的单点故障问题,可以通过配置NameNode高可用来解决问题。

2.通过HDFS联邦的方案可以使多个NameNode分别管理不同的目录,从而实现访问隔离及横向扩展。

3.将资源管理器和应用程序分开,分别由ResourceManager和ApplicationMaster负责。

4.YARN是一个统一的框架管理器,可以集成各种计算框架,统一由YARN进行管理和资源调度。

posted @ 2020-04-13 15:54  雨中漫步人生  阅读(415)  评论(0编辑  收藏  举报