💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 资源模型和container yarn将服务资源进行抽象的封装,它**使用container对象代表申请资源的基本单元**. 这些资源包括资源名称(服务名称,机架等),内存和CPU yarn通过container机制将服务器资源进行了隔离. 每个ApplicationMaster向ResourceManager申请资源,当ApplicationMaster向ResourceManager申请资源时,ResourceManger返回的资源使用Container的个数来表示,比如一个spark计算任务需要5个container资源 # ResourceManager ResourceManager是一个全局的资源管理器,负责整个系统的资源管理和分配以保证整个集群的高效运行. 它会根据容量,队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统的资源分配给各个正在运行的应用程序. **只负责根据各个应用程序的资源请求进行资源分配,不参与任何与具体应用程序相关的工作**,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成. 资源分配管理单位用的是我们刚才介绍过的container对象. 此外,ResourceManager还支持一个可插拔的调度器插件来支持多种资源调度策略,比如使用公平调度或者容量调度 # ApplicationMaster **每个想要运行在YARN上的应用都必须有一个相应的ApplicationMaster实现** **应用将内部的任务调度逻辑和监控都交由它们自己的ApplicationMaster实现类来处理**. ApplicationMaster是YARN的一个创新设计,YARN通过这种机制将自己打造成了一个扩展性极强的通用资源调度框架,因为他允许用户开发自己的ApplicationMaster实现 ApplicationMaster进程在运行的过程中主要负责与ResourceManager进行通信,以申请执行任务时所需要的资源,在申请到资源后再进一步执行自身内部的调度任务. 同时,ApplicationMaster也负责监控自己运行的内部任务状态,在任务失败的时候重新为任务申请相应资源并重启任务 ApplicationMaster通常作为一个应用的主进程,主要用来扮演拆分子任务,汇总结果数据在这类的总体调度,比如spark的Driver进程.而真正的执行程序业务逻辑的进程是在NodeManager进程上执行的 # NodeManager NodeManager是每个服务器节点上资源管理器,负责管理自己所处服务器Containers的整体生命周期. 在yarn上运行的**应用最终的逻辑执行程序**(比如spark的task,mapreduce的job)都会在NodeManager的Container中运行,可以说NodeManager是yarn的计算节点的代理,**因为ResourceManager只会将任务分配到启动了NodeManager进程的服务器** 当NodeManager进程启动的时候,它会向ResourceManager进行注册,并定时汇报自己所在服务器的资源使用情况和container运行状态,同时它也接受并处理来自ApplicationMaster的Container启动和停止等各种请求 # 单一集群架构 **ResourceManager,NodeManager和Container组件都不关心具体的应用程序或任务的类型,只有ApplicationMaster才是应用类型相关的** Yarn通过使用开放ApplicationMaster的集成方式,允许第三方应用框架便捷的和YARN进行集成. 这才有了像MapReduce on Yarn, Storm on YARN, Spark on Yarn和Tez on Yarn等众多第三方应用集成方案出现 通过这种资源共享的单一集群架构,可以实现服务器资源真正的共享使用,以达到降低技术集成成本和增强资源整体利用率的目的 # 工作流程 1. 用户向Yarn提交应用程序 2. ResourceManager为该应用程序找到一个可用的NodeManager并分配第一个Container.然后在这个Container中启动应用程序的ApplicationMaster 3. ApplicationMaster向ResourceManager进行注册,这样用户就可以通过ResourceManager查看应用程序的运行状态并对任务进行监控 4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源 5. ApplicationMaster申请到资源后与对应的NodeManager通信,要求它启动Container并为任务设置好运行环境 6. 应用程序的任务开始在启动的Container中运行,各个任务向ApplicationMaster汇报自己的状态和进度,以便ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动 7. 应用程序在运行的过程中,客户端通过轮询的方式主动与ApplicationMaster通信以获得应用的运行状态,执行进度等信息 8. 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己 ![](https://box.kancloud.cn/2df50a3d022b12e8d3a38c29276f8087_1749x880.png)