关键字:YARN架构设计、常用命令、三种调度器
YARN架构设计也是主从架构,分为Resource Mananger(RM)和NodeManager(NM),其中RM主要负责应用管理和资源调度,NM主要负责容器和作业。
一、YARN架构介绍
YARN架构图如上图所示,详细介绍如下:
1、ResourceManager(RM)
负责对各NM上的资源进行统一管理和调度,将AM分配空闲的Container运行并监控其运行状态。对AM申请的资源请求分配相应的空闲Container。主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager)
调度器(Scheduler):调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是
Container,从而限定每个任务使用的资源量。Scheduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为用程序分配封装在Container中的资源。调度器是可插拔的,例如CapacityScheduler、FairScheduler。(PS:在实际应用中,只需要简单配置即可)。
应用程序管理器(Application Manager):应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AM、监控AM运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
2、NodeManager(NM)
NM是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container 启动/停止等请求。
ApplicationMaster(AM):用户提交的应用程序均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。
RM为AM返回的资源便是用Container 表示的。 YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。
二、 yarn运行流程
- client向yarn提交job,首先找ResourceManager分配资源
- ResourceManager开启一个container,在container中运行一个Application Manager
- Application Manager找一台Nodemanager启动application Master,计算任务所需。
- Application Master向Application Manager申请任务所需资源
- Resource Scheduler将资源封装(描述信息)给Application Master
- Applocation Manager获取到的资源分发给各个Node Manager
- 各个nodemanager开始执行map task
- map task结束后开始执行 reduce task
- map task和reduce task将执行结果反馈给Application Master
- Application Master 将结果反馈给Application Manager
三、YARN常用命令
1、 查看YARN命令
进入hadoop程序目录中的bin目录,查看yarn所有命令
yarn
查看正在运行的任务
yarn application -list
杀掉正在运行任务
yarn application -kill 任务id
例:yarn application -kill application_1528463812366_0001
四、YARN三种调度器
应用对YARN资源的请求应该立刻得到满足,但是实际环境中资源有限,一个应用资源的请求可能要等待一段时间才能得到相应的资源。在YARN中,负责应用资源分配的是Schedule,对于调度,其本身就是一个难题。YARN中提供了三种可以选择的调度器:FIFO Schedule、Capacity Schedule、FairSchedule,其对比图如下图所示。
1、FIFO Scheduler(队列调度器)
按照任务提交的顺序,将任务排成一个队列,当第一个任务执行完成,再执行第二个任务,先进入队列的任务先执行。
2、Capacity Scheduler(容量调度器)
简单理解就是会额外空出一部分资源,专门用于完成一些小的job,但是若没有相关任务,则这个资源就会一直占用,容易造成资源浪费。
Capacity调度器允许多个组织共享集群资源,将每个组织分配专门的队列,每个队列分配一定的资源,这样就可以通过设置多个队列的方式为多个组织提供服务。在一个队列内,资源的调度还是FIFO Scheduler。
3、Fair Schedule(公平调度器)
Fair 调度器会自动为所有运行的job动态的调整系统资源,比如当有一个大的job提交时,只有这个job在运行,此时所有系统资源都被他利用。当有另外一个小job提交时,Fair调度器也会为分配资源给这个job(注意这里会有一个延时,因为他需要等第一个任务释放占用的Container,小任务执行也会释放自己的Container)。