Yarn产生背景:
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
模块:hdfs mapreduce yarn
Yarn的架构:主从架构 resourcemanager nodemanager
整个资源调度的老大
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提供资源的时候以container为单位进行提供
Container:逻辑资源容器或叫虚拟资源容器(这部分资源并未真正的从节点中划分出来的,概念上的划分)
资源容器:封装了一定的资源(CPU 内存 网络 IO)的容器 nodemanage在提供资源的时候,要么n(正整数)个container,要么是0个。
作用:
1)为计算程序真正的提供资源
2)接收resourcemanager的命令,并处理
3)向resourcemanager发送心跳,告诉resourcemanager自己的存活状况
4)接收并处理MRappmaster的命令
运行一个计算程序需要满足的条件
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注销自己。