吊打面试官之yarn工作原理

1.yarn架构

在这里插入图片描述

1.客户端提交应用程序给ResourceManager
2.ResouceManager会生成ApplicationMaster,并在某一个节点服务器上运行ApplicationMaster
3.ApplicationMaster向ResourceManger注册其信息,并且向ResourceManger发送申请资源报告,申请contaniner容器,以运行application下的任务(其实是每个container容器被分配后,由每个机器上的nodemanger来启动该container)
4.在运行过程中,由applicationMaster来运行和管理container里面的任务 其中container会通过心跳机制向applicationMaster来发送运行信息。
5.任务完成之后,application向ResourceManager报告,任务完成,container进行资源释放。

2.功能

1.resourcemanager:
处理客户端的请求
监控nodemanager
启动或监控applicationMaster
资源的分配和调度

2.nodemanager:
管理单个节点的资源
处理resourcemanager的命令
处理来自ApplicationMaster的命令

3.ApplicationMaster作用:
负责数据的切分
为应用程序申请资源并分配给内部的任务
任务的监控与容错

4.Container
container是yarn中的资源抽象,他封装了某个节点是哪个的多维度资源,
如内存、cpu、磁盘、网络。
对资源抽象和封装,目的是为了让每个应用程序对应的任务完成执行
任务之间不能相互影响,任务不能相互交叉使用和共享

3.工作流程

(1)Client向ResourceManager提交作业(可以是Spark/Mapreduce作业)

(2)ResourceManager会为这个作业分配一个container

(3)ResourceManager与NodeManager通信,要求NodeManger在刚刚分配好的container上启动应用程序的Application Master

(4)Application Master先去向ResourceManager注册,而后ResourceManager会为各个任务申请资源,并监控运行情况

(5)Application Master采用轮询(polling)方式向ResourceManager申请并领取资源(通过RPC协议通信)

(6)Application Manager申请到了资源以后,就和NodeManager通信,要求NodeManager启动任务 .最后,NodeManger启动作业对应的任务。

4.工作机制

(0)Mr 程序提交到客户端所在的节点。

(1)Yarnrunner 向 Resourcemanager 申请一个 Application。

(2)rm 将该应用程序的资源路径返回给 yarnrunner。

(3)该程序将运行所需资源提交到 HDFS 上。

(4)程序资源提交完毕后,申请运行 mrAppMaster。

(5)RM 将用户的请求初始化成一个 task。

(6)其中一个 NodeManager 领取到 task 任务。

(7)该 NodeManager 创建容器 Container,并产生 MRAppmaster。

(8)Container 从 HDFS 上拷贝资源到本地。

(9)MRAppmaster 向 RM 申请运行 maptask 资源。

(10)RM 将运行 maptask 任务分配给另外两个 NodeManager,另两个 NodeManager 分别领取任务并创建容器。

(11)MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 maptask,maptask 对数据分区排序。

(12)MrAppMaster 等待所有 maptask 运行完毕后,向 RM 申请容器,运行 reduce task。

(13)reduce task 向 maptask 获取相应分区的数据。

(14)程序运行完毕后,MR 会向 RM 申请注销自己。