Yarn原理
参考资料
参考:https://blog.csdn.net/COMEO/article/details/111421312
参考(较详细):https://www.cnblogs.com/nwnusun/p/16799362.html
Yarn概述
Yarn诞生背景
- Hadoop1.x中,存在资源管理问题
- 随着技术发展,出现了多种计算框架
Yarn是为了解决集群,对于多种框架,进行统一资源管理的场景,应运而生
Yarn介绍
yarn是一种通用的资源管理系统和调度平台。
资源管理系统 :管理集群内的硬件资源,和程序运行相关,比如内存,CPU等。
调度平台:多个程序同时申请计算资源时提供分配,调度的规则(算法)。
通用:不仅仅支持MapReduce程序,理论上支持各种计算程序如spark,flink。yarn不关系程序的计算内容,只关心程序所需的资源,在程序申请资源的时候根据调度算法分配资源,计算结束之后回收计算资源。使用yarn作为资源调度平台的计算框架自身需要提供ApplicationMaster来负责计算任务的调度。
Yarn框架
1.1 Resource Manager(总指挥)
Rescource Manager = Rescource Scheduler + Application Manager
1.1.1 Scheduler(调度器)
根据容量 / 队列等限制条件,将系统资源分配给正在运行的应用程序
- 队列调度器(FIFO Scheduler):先进先出,大任务可能会占用所有集群资源,导致其他任务阻塞
- 公平调度器(Fair Scheduler): 所有任务平分集群资源
- 容量调度器(Capacity Scheduler): https://blog.csdn.net/qq_20042935/article/details/125651818
1.1.2 Application Manager(APP指挥)
负责管理整个系统的应用程序,包括程序的提交 / 调度协调资源 / 启动ApplicationMaster / 监控ApplicationMaster / 失败时重启
1.2 Node Manager(节点干部)
NodeManager相当于工作节点
- 会定时向ResourceManager汇报所在节点资源使用情况
- 会接受处理来自ApplicationMaster的启动停止容器(Container)的各种请求
1.3 Application Master(APP节点干部)
ApplicationMaster进行二次分配,相当于ApplicationManager下面的小组长
- 协调来自ResourceManager的资源,负责二次分配
- 通过NodeManager监控容器执行/资源使用情况,在任务运行失败时,申请资源重启任务
1.4 Container(虚拟资源池)
对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
Yarn工作流程
Mr程序提交到客户端所在的节点。
(2)Yarn runner向Resource manager申请一个Application。
(3)rm将该应用程序的资源路径返回给yarn runner。
(4)该程序将运行所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运行mr AppMaster。
(6)RM将用户的请求初始化成一个task。
(7)其中一个NodeManager领取到task任务。
(8)该NodeManager创建容器Container,并产生MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运行maptask资源。
(11)RM将运行maptask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序。
(13)MrAppMaster等待所有maptask运行完毕后,向RM申请容器,运行reduce task。
(14)reduce task向maptask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。