浅谈Yarn

Yarn产生背景:

Hadoop1.0版本

Hdfs  分布式存储 Map/reduce v1:

Mapreduce  分布式计算 名叫map/reduce v1

启动job时对应的进程:jobtracker和tasktracker

Jobtracker(类似于yarn的resourcemanager):Mr程序运行的老大

1)资源的分配

2)启动所有的应用程序,并且跟踪每一个应用程序的运行状态

3)jobtracker不存在高可用的配置方案 存在单点故障的哟

 

Tasktracker:

负责为应用程序提供资源

强行的将每一个节点的资源强行分为2部分:

1.mapslot---只能用于运行maptask任务

2.reduceslot---只能用于运行reducetask任务

这种资源分配方式的严重缺点:不能合理利用资源

1)扩展性差

2)可靠性低 不支持高可用的配置 存在单点故障

3)资源利用率低

4)map/reduce V1 只能支持mapreduce任务的执行

不能调用其他的计算任务

Yarn:spark on yarn

 

Hadoop2.0版本

模块:hdfs mapreduce yarn

Yarn的架构:主从架构 resourcemanager nodemanager

主节点:resourcemanager

整个资源调度的老大

1)负责为每一个job的分配资源

2)负责启动当前job的老大 :MRappmaster

3)负责管理所有的nodemanager

监控从节点的资源状况 存活状况

 

resourcemanager内部组成:

1.ASM:

Applicationsmanager:管理所有的应用程序

所有job的管理者

管理所有的job的MRappmaster

2.Scheduler:调度器

Yarn上提交多个job的时候,调度器就负责哪一个任务

关于Job的运行顺序问题,分一下类:

FIFO:FIRST IN FIRST OUT 先进先出

内部维护一个队列,先提交的job在队列的最前面

优先调度队列前面的

按job提交的先后顺序进行调度的

缺陷:如果前面提交的任务都是大的任务,造成后面的任务需要等待很长时间

Fair:公平调用器

第一个提交的任务,全部的资源执行这个任务

第一个任务执行的过程中,又提交了一个任务,两个job平分资源,如果又提交,但是资源再进行平分,每一个job占用1/3

缺点:每一个任务的计算量不一样,如果有一个任务计算量很大,会造成这个任务的运行时间比较长。

Capacity:计算能力调度器/容量调度器

可以根据job的实际运行的任务,进行一个手动的资源划分,内部维护多个队列,每一个队列都是先进先出的 FIFO

用户可以配置每一个队列的资源配比

所以以上三种调度器比较起来一般集群中默认的调度器为capacity

 

从节点:nodemanager

负责给计算任务真正的提供资源的

Nodemanager提供资源的时候以container为单位进行提供

Container:逻辑资源容器或叫虚拟资源容器(这部分资源并未真正的从节点中划分出来的,概念上的划分)

资源容器:封装了一定的资源(CPU 内存 网络 IO)的容器 nodemanage在提供资源的时候,要么n(正整数)个container,要么是0个。

作用:

1)为计算程序真正的提供资源

2)接收resourcemanager的命令,并处理

3)向resourcemanager发送心跳,告诉resourcemanager自己的存活状况

4)接收并处理MRappmaster的命令

 

详细概念:

运行一个计算程序需要满足的条件

  1. 程序
  2. 资源
  3. 数据

MRappmaster:

每一个job启动的时候 会最先启动一个这个job对应的MRappmaster

一旦启动

(1)负责向resourcemanager申请maptask或reducetask资源

(2)负责启动当前job的maptask任务和reducetask任务

(3)负责跟踪每一个maptask和reducetask运行状态

(4)将失败的maptask reducer任务进行重启

Yarn的资源调度过程:

1)客户端向resourcemanager发送一个提交job的请求

Hadoop jar ...jar .....

任务先提交给ASM,向ASM进行注册

ASM将任务转交给scheduler

2)一旦有资源,调度器开始提交job的运行

Resourcemanager到对应的资源上启动当前应用程序的MRappmaster

3)MRappmaster向resourcemanager申请运行maptask和reducetask的资源

4)resourcemanager向MRappmaster返回资源节点

5)MRappmaster到对应的节点上启动container,并在该container中启动maptask任务和reducetask任务

6)maptask和reducetask运行过程中向MRappmaster汇报自己的运行状况和进度

7)maptask或reducetask运行完成就会向MRappmaster汇报

MRappmaster进行资源销毁

8)所有的maptask和reducetask都运行完成,MRappmaster向resourcemanager进行注销自己

 

Job提交过程

1.客户端向resourcemanager发送job提交的请求

2.resourcemanager向客户端返回一个applicationID和一个共享资源路径,该共享资源路径是用于客户端提交共享资源的。

3.客户端将共享资源放在共享资源路径下

4.客户端将共享资源放置完毕后会向resourcemanager返回响应,并真正的提交这个job

5.resourcemanager会为当前的job先分配一个节点,用于启动MRappmaster

6.resourcemanager到对应的nodemanager上面启动:

先启动container,再启动MRappmaster

7.MRappmaster初始化工作簿(用于记录maptask和reducetask的运行状态和进度)

8.MRappmaster会到共享资源路径下下载共享资源到本地

9.MRappmaster向resourcemanager申请maptask和reducetask运行的资源

10.resourcemanager向MRappmaster返回maptask和reducetask运行的节点

11.MRappmaster会到对应的节点上启动container

12.Container到共享资源路径下下载共享资源后启动maptask任务

13.maptask启动之后向MRappmaster汇报自己的运行状态

14.MRappmaster在获取maptask运行完成一个的时候就会启动reducetask任务

15.container到对应的共享资源路径下载共享资源,下载完成之后启动reducetask

16.reducetask启动之后向MRappmaster汇报进度和状态

17.maptask或者reducetask运行完成会向MRappmaster响应,MRappmaster进行资源回收

18.当所有的maptask和reducertask都执行完成,MRappmaster向resourcemanager注销自己。

你可能感兴趣的:(yarn)