(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汇报并注销自己 并把整个运行结果返回给客户端