yarn
yarn 任务调度器组成
-
ResourceManager(RM):
整个集群资源(内存、cpu等)的调度者
1、接收客户端的请求(该请求是运行程序的请求)
2、启动和监控MRAppMaster
3、资源调度,调度整个计算程序的资源,决定任务在哪个节点执行 -
NodeManager(NM):
负责提供真正的资源,运行实际的计算程序
1、接收resourcemanager的命令
2、管理单个节点上的资源
3、为计算程序提供资源
4、处理来自MRApplicationMaster的命令 -
MRAppMaster
对应一个应用程序,帮助计算任务程序向resourcemanager申请资源
负责启动maptask和reducetask任务,监控maptask和reducetask的运行进度 -
ASM applicationmanager
应用程序管理器ASM管理整个系统中所有的应用程序,包括应用程序提交、与调度器协商资源以启动MRAppMaster、监控MRAppMaster运行状态并在失败时重新启动。 -
container
抽象资源容器,是由ResourceManager Scheduler服务动态分配的资源构成,封装着一定的cpu、io、网络等资源,是运行maptask和reducetask的容器,一个maptask或者reducetask的所有task都是在一个容器里面执行完成的,容器的大小是可以动态调整的。 -
scheduler
决定调度什么时候执行哪个计算程序(即job执行顺序)
调度方式:
FIFO:先提交的程序先执行,后提交的程序后执行,通过内部维护一个队列实现
FATR:公平调度器,大家平分资源运行,通过内部维护多个队列实现,多个队列之间进行资源分配,程序之间平均分配资源。
CAPICITY:按需进行资源配置,两个队列:第一个队列:60%,40%,在每个队列都是先进先出。
yarn的资源调度过程
-
提交job
1、Client写好计算程序代码,向整个集群发布提交mapreduce作业的请求
2、Client请求RM分配一个作业id,同时根据作业指定的文件名称计算出资源路径
3、Client端提交JAR、切片信息和配置文件
4、Client提交完成后,想RM申请运行MRAppMaster -
初始化job
1、RM接收到请求后,把请求交给ASM,ASM做一系列的校验,检查无误后,RM将job添加到scheduler
2、scheduler指定一个NM执行该job
3、NM创建container,启动MRAppMaster
4、下载client提交的资源到当前NM; -
分配任务
1、MRAppMaster向resourcemanager申请资源,为maptask和reducetask申请资源。
2、RM向MRAppMaster返回当前有资源的节点,比如是01和03节点。返回节点的规则:优先返回有数据的节点,maptask任务执行个数由切片个数决定,切片---块---hdfs---某一个节点本地,前提条件是这个节点上有可用的资源,数据本地化:可以避免计算的时候数据的网络传输,提升计算性能。
3、RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。 -
任务执行
1、去对应的节点上开启container和maptask任务。
先去01节点开启container,再在container中开启maptask任务,
去03节点开启container,再在container中开启maptask任务。
2、所有的maptask向MRAppMaster汇报自己的运行状态和进度。
3、MRAppMaster会在所有的maptask执行了80%的时候开启reducetask任务。
4、MRAppMaster到对应的节点上开启reducetask
5、reducetask从Maptask获取相应分区的数据,执行reduce任务。 -
任务执行完毕
1、返回reducetask的执行结果
2、所有的maptask和reducetasku都运行完成后,MRAppMaster向RM注销自己。
3、资源回收
job细说
真正执行的maptask reducetask都是基于jar包的,但是客户端上传时实际只会上传到一个节点。其他NM执行的时候,会从当前节点拉取Jar包,其实不止jar,每次job运行的时候,都会有一些公共资源,包括jar包和一些配置文件
公共资源路径:
每次运行job的时候都会生成一个和job id相同的目录,
/tmp/hadoop-yarn/staging/hadoop/.staging
公共资源核心文件:
1、jar包,即我们的处理程序
2、job.split切面信息,FileInputFormat.addPath().getSplits()
3、job.xml配置文件,主要包含job运行的参数信息。
真正在执行程序的时候,maptask reducetask每一个任务都在执行jar包,但是你的jar提交的时候只上传到一个节点上,maptask和reducetask运行的时候可能会运行在和jar包不同的节点上。但是程序并没有报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义