yarn资源调度系统
文章目录
1:yarn简介
YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操
作系统平台。
YARN 其实就与运行的用户程序完全解耦,就意味着 YARN 上可以运行各种类型的分布式运算程序,所以,Spark、Storm 等运算框架都可以整合在 YARN 上运行,只要他们各自的框架中有符合 YARN 规范的资源请求机制即可
1:yarn架构
1:ResourceManager
RM(ResourceManager)是 YARN 集群主控节点,负责协调和管理整个集群(所有 NodeManager)的资源,响应用户提交的不同类型应用程序的解析,调度,监控等工作。ResourceManager 会为每一个 Application 启动一个 AppMaster,并且 AppMaster 分散在各个 NodeManager 节点。
主要由两个组件构成:调度器(Scheduler)和应用程序管理器(ApplicationsManager)
ResourceManager 的职责:
- 1、处理客户端请求,比如程序提交
- 2、启动或监控 MRAppMaster
- 3、监控 NodeManager健康状态
- 4、资源的分配与调度
2:NodeManager
NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者,监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期管理,监控每个 Container 的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。
YARN 集群的从节点 NodeManager 的职责:
- 1、管理单个节点上的资源
- 2、处理来自 ResourceManager 的命令
- 3、处理来自 AppMaster 的命令
- 4、监控Container 容器资源
3:AppMaster
AppMaster对应一个应用程序,职责是:向YARN资源调度器申请执行任务的资源容器,运行任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况
4:Container容器
Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager Scheduler 服务动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,容器的大小是可以动态调整的
5:ASM
应用程序管理器 ASM 负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协
商资源以启动 MRAppMaster、监控 MRAppMaster 运行状态并在失败时重新启动它等
6:Scheduler
调度器根据应用程序的资源需求进行资源分配,不参与应用程序具体的执行和监控等工作
资源分配的单位就是 Container,YARN 本身为我们提供了多种直接可用的调度器,比如 FIFO,Fair Scheduler 和 Capacity Scheduler 等
2:YARN 作业执行流程
利用yarn进行资源调度的程序,基本流程都和下面一致,包括spark,MR等数据处理组件
- 1、用户向 YARN 中提交应用程序,其中包括 AppMaster 程序,启动 AppMaster 的命令,用户程序等。
- 2、RM为该程序分配第一个 Container,并与对应的 NodeManager 通讯,要求它在这个 Container 中启动应用程序 MRAppMaster。
- 3、AppMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManager
查看应用程序的运行状态,然后将为各个任务申请资源,并监控它的运行状态,直到运行结
束,重复 4 到 7 的步骤。 - 4、AppMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
- 5、一旦 AppMaster 申请到资源后,便与对应的 NodeManager 通讯,要求它启动任务。
- 6、NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将
任务启动命令写到一个脚本中,并通过运行该脚本启动任务。 - 7、各个任务通过RPC 协议向 AppMaster 汇报自己的状态和进度,以让 AppMaster掌握各个任务的运行状态,从而可以在任务败的时候重新启动任务。
- 8、应用程序运行完成后,AppMaster 向 ResourceManager 注销并关闭自己。