一、 概念
1、 Yarn是一个分布式资源调用系统,专门用来负责给分布式计算程序分配计算资源的
2、 Yarn的组成
1、 ResourceManager
整个Yarn集群的管理者,负责分配资源
2、 NodeManager
Yarn集群的打工者,负责接收RM的指令,准备计算资源用于运行分布式计算程序
3、 Yarn运行一个分布式任务之后,还会出现两个组件
ApplicationMaster
运行一个mapreduce/spark/flink程序,首先Yarn会针对计算程序专门先启动一个用于辅助成功运行的master管理者,通过这个管理者运行专门的计算程序
Container
容器,计算需要资源,资源RM分配后,NM真正提供,NM不是直接把资源给计算任务,而是先把RM需要我们分配的计算资源打包成一个容器,打包成为容器之后,交给AM去运行针对性的任务
二、 Yarn的工作流程
1、 MR程序提交到客户端所在的节点
2、 yarnrunner向RM申请Application资源
3、 RM返回资源提交路径给yarnrunner
4、MR程序将资源提交到对应的hdfs上的路径
5、 提交完成后,MR程序向RM申请MRApplicationMaster
6、 RM将用户的请求初始化成一个Task
7、 其中一个NodeManager领取到该Task任务
8、这个NodeManager创建Container容器并运行MRApplicationMaster
9、 Container容器从hdfs上拷贝资源到本地
10、MRApplicationMaster向RM申请运行MapTask容器
11、 RM将任务分发给其他NodeManager,NodeManager领取到任务后创建容器
12、 MRApplicationMaster向接收到任务的NodeManager分发启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序
13、 MRApplicationMaster向RM申请两个容器运行reduceTask任务
14、 reduceTask向MapTask获取相应的分区数据
15、 运行完成后MRApplicationMaster向RM注销自己
三、 资源调度器
Yarn资源是有限的,资源调度器的作用是在Yarn接收到资源请求后,将其封装成任务,任务放到资源调度器中,由资源调度器来决定那个任务先运行,那个任务后运行
分类
- FIFO(先进先出)调度器
将任务按照到达时间的先后顺序排队,依次执行,前一个任务没有执行完,后一个任务就无法执行
- 容量调度器
将Yarn的资源拆分成多份,一份资源对应一个任务队列,同一时刻可以运行多个任务,但是每个队列中需要遵循先来先执行
- 公平调度器
将Yarn的资源拆分成多份,一份资源对应一个任务队列,同一时刻可以运行多个任务,而且每一个队列中公平享有这个队列分配的资源