(Yet Another Resource Negotiator,另一种资源协调者)
1.产生背景
hadoop1
hdfs 分布式存储
mapreduce 分布式计算 编程套路+计算流程
运行计算任务的时候
jobtracker 计算老大 主节点 单点故障
1)既要负责整个集群的资源调度
一个集群中 执行多个mr任务
2)还要负责任务启动 以及进度跟踪
启动mapreduce任务 跟踪maptask reducetask的进度
如果集群中有多个 同时负责跟踪多个

jobtracker压力很大
		tasktracker   计算的从节点
			提供资源   负责计算  
			将整个节点的资源  分为2部分  资源极大的浪费
				mapslot  --- maptask 
				reduceslot  --- reducetask 
				
		缺陷:
			1)单点故障
			2)扩展性差
			3)资源利用率低
			4)资源调度 只能为mr任务服务  计算框架的资源调度使用受限
				
hadoop2
	**将资源调度 和 进度跟踪分开**
	hdfs
	mapreduce   编程套路  逻辑
	yarn 负责资源调度  mr   spark 
	任务跟踪  每一个job启动之后  负责自己的任务跟踪

2.yarn的架构

resourcemanager : 主节点
负责接收客户端的请求 提供资源调度 负责整个集群的资源调度
ASM:
applicationsmanager 所有任务的管理
每一个任务的启动销毁 每一个任务的进度跟踪 胜败
管理每一个应用程序的mrappmaster
1)每一个应用 mrappmaster 启动 销毁
2)跟踪mrappmaster运行状态 失败重启
Scheduler:
调度器 决定的任务的执行顺序
FIFO:
first in first out
内部维护的是单一的队列 哪一个任务先提交 哪一个任务先进行资源分配 哪一个任务运行
缺点:
如果前面有一个大任务 后面的任务阻塞
FAIR:
公平调度器
所有任务平分资源
1task 100%
2task 50%
3task 33%
4task 25%
缺点:
没有根据任务大小进行资源分配

CAPACITY:
		计算能力  容量
		可以根据任务   组真是需要  手动配置资源占比
		group1  测试  20%  资源栈  单一队列  FIFO 
		group2  生产  80%  资源栈   单一队列  fifo
		内部维护了多个队列  每一个队列  都是FIFO

nodemanager:从节点
负责真正的资源提供者 为计算任务提供资源
需要的时候提供 运行完成 回收资源 动态
提供资源的时候 maptask | reducetask 单位提供
1maptask|1reducetask ---- 1container 资源
container 抽象资源容器 逻辑资源容器 nodemanager提供资源的基本单位|最小单位 内部封装了一定的资源(cpu 内存 磁盘 网络 io )
一个container运行的是一个maptask |reducetask

补充概念:
MRAppMaster:
mapreduce application master
mapreduce中 每一个应用程序(job)运行的时候 先启动mrappmaster 负责管理整个应用程序
1)帮助当前应用程序申请资源
2)启动maptask reducetask
3)跟踪maptask任务 reducetask任务的运行状态和进度
4)进行maptask reducetask 资源回收

3.资源调度过程

1)客户端提交hadoop jar… 客户端先去请求rm 申请资源
2)rm会返回一个资源节点 用于启动当前应用程序的mrappmaster
3)rm会到对应的节点上 启动mrappmaster
4)mrappmaster 向resourcemanager进行申请资源 maptask|reducetask
5)resourcemanager进行向mrappmaster 返回对应的资源节点
6)mrappmaster 就会到对应的资源节点上启动(container)maptask任务
7)maptask任务就会向 mrappmaster 进行汇报自己的运行状态和进度
8)当mrappmaster 获取到 有一个maptask执行完成 就开始启动reducetask(container)
9)reducetask 启动之后 也会向 mrappmaster进行汇报自己的状态和进度
10)每一个maptask 或 reducetask 运行完成 mrappmaster就会到对应的节点上进行资源回收
11)整个任务运行完成 mrappmaster 会向rm汇报并注销自己 并把整个运行结果返回给客户端