YARN机制
正文
YARN是资源管理调度的机制,之前一直以来和MapReduce机制合在一起,之后才分开。正是因为YARN机制单独独立出来,才使得Hadoop框架更加具有普适性。MapReduce可以处理海量离线数据,同样如果处理实时数据,换成Spark,Storm即可,不用重新部署集群,因为资源管理调度YARN是共用的。
当提交一个job,YARN的资源调度如下图所示:
YARN有两个比较重要的组成,Resource Manager和Node Manager,执行hadoop jar cn.darren.hadoop.mr.wordcount.WCRunner这条指令之后,会产生一个RunJar的进程,向RM申请资源,RM会返回job相关资源提交的路径和本Job产生的ID。进而RunJar提交资源到staging-dir路径下面,这在HDFS中,提交完向RM汇报提交结果。RM会将本job加入任务队列,其中RM和NM之间采用“心跳机制”,NM如果觉得自己有空闲,就可以去RM的任务队列领取任务。Node Manager接收到分配任务后,会分配运行的资源容器,有点类似于虚拟机,包括文件资源、CPU资源、内存资源等,业务是在里面跑的。但是YARN并不能启动MapReduce内部的逻辑,所以这时候会启动MRAppMaster,这是用来操作MapReduce的,然后它就会向RM进行注册,比如在哪个节点运行,什么标识等等,同样也会请求一些信息,比如分配的资源都在哪些节点上。然后MRAppMaster就会启动map任务进程,启动起来的进程叫做yarnChild,map执行完之后,会启动Reduce任务进程。MRAppMaster当job执行完后,会向RM注销自己。(map task和yarn task都叫做yarnChild)
总结一下:
在YARN框架中,起监控作用的是Resource Manager,用来监控Node Manager,它们都是节点,也就是进程。
在MapReduce框架中,起监控作用的是MRAppMaster,用来监控yarnChild,它们都是动态产生的进程。
YARN提交job的源码流程如图所示:
最后,将YARN机制的整个运行过程用一张图作为总结,可以看清其总的流程:#
在yarn中有如下几个概念:
- ResourceManager
- NodeManager
- Secheduler
- ApplicationManager
- MRAppMaster
- Container
ResourceManager和NodeManager对应实体的物理节点,分别映射到yarn的主节点和计算节点。
1、ResourceManager#
ResourceManager节点的功能由Secheduler和ApplicationManager协调完成。
其中ApplicationManager职责如下
- 负责接收客户端提交的job
- 判断启动该job的MRAppMaster所需的资源
- 监控MRAppMaster的状态,在其失败的时候重启MRAppMaster
Secheduler负责仅仅提供一个调度算法调度ApplicationManager提交的任务,他不提供失败重启和任何监控功能。调度算法可以自定义。yarn针对不同的场景提供了三种Secheduler实现:FIFO Scheduler ,Capacity scheduler,Fair Scheduler(请参照调度器详解)。
2、NodeManager#
NodeManager对应集群中的计算节点,但是他的功能仅仅只是抽象本节点的资源(如cpu,内存,磁盘,网络)并且定时向ResourceManager的Secheduler汇报。
Container是一组资源的集合,一个container一般用来执行一个task。
MRAppMaster是job的生命周期的管理者,负责整个job执行过程的监控。
前面提到ApplicationManager会判断启动MRAppMaster所需的资源,之后提交给Secheduler,Secheduler将这些资源封装成一个Container,然后根据调度算法在某一个NodeManager上启动MRAppMaster(当然它会消耗掉该NodeManager的资源)。
MRAppMaster启动之后会计算job所需要的资源,并且向Secheduler申请这些资源,NodeManager分配完成这些任务的container之后,会由MRAppMaster来监控这些container的状态,如果失败就回收资源重新申请,如果成功就释放资源,当任务执行完成之后汇报Secheduler,Secheduler回收资源并且向ResourceManager返回执行结果,整个任务处理完毕。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?