YARN
- Apache Hadoop YARN,一种新的Hadoop资源管理器
- 一个
通用
资源管理系统
和调度平台
,可为上层应用提供统一的资源管理和调度 - 为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处
功能
- 资源管理系统:集群的硬件资源,和程序运行相关,比如内存、CPU等
- 调度平台:多个程序同时申请计算资源如何分配,调度的规则(算法)
- 通用:
- 不仅仅支持MapReduce程序,理论上支持各种计算程序
- YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我
概述
- 可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、CPU等)
- Hadoop能有今天这个地位,YARN可以说是功不可没。因为有了YARN ,更多计算框架可以接入到 HDFS中,而不单单是 MapReduce,正是因为YARN的包容,使得其他计算框架能专注于计算性能的提升
- HDFS可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统, YARN功不可没。
三大组件
- ResourceManager(RM)
- YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者
- 接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源
- NodeManager(NM)
- YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源
- 根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况
- ApplicationMaster(AM)
- 用户提交的每个应用程序均包含一个AM
- 应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况
交互流程
核心流程
- MR作业提交 Client–>RM
- 资源的申请 MrAppMaster–>RM
- MR作业状态汇报 Container(Map|Reduce Task)–>Container(MrAppMaster)
- 节点的状态汇报 NM–>RM
整体概述
当用户向 YARN 中提交一个应用程序后, YARN将分两个阶段运行该应用程序
- 第一个阶段是
客户端申请资源启动运行本次程序的ApplicationMaster
- 第二个阶段是
ApplicationMaster根据本次程序内部情况,为它申请资源,并监控它的整个运行过程,直到运行完成
MR提交YARN
- 第1步、用户通过客户端向YARN中ResourceManager提交应用程序(比如hadoop jar提交MR程序)
- 第2步、ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster
- 第3步、ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过
ResourceManage查看应用程序的运行状态(处理了百分之几) - 第4步、AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态
- 第5步、一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务
- 第6步、NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
- 第7步、各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随
时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC 向 ApplicationMaster 查询应用程序的当前运行状态 - 第8步、应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。
资源调度器
资源调度
- 在理想情况下,应用程序提出的请求将立即得到YARN批准
- 但是实际中,资源是有限的,并且在繁忙的群集上,应用程序通常将需要等待其某些请求得到满足
- YARN调度程序的工作是
根据一些定义的策略为应用程序分配资源
- 在YARN中,负责给应用分配资源的就是Scheduler,它是ResourceManager的核心组件之一
- Scheduler完全专用于调度作业,它无法跟踪应用程序的状态
- 一般而言,调度是一个难题,并且没有一个“最佳”策略
- YARN提供了多种调度器和可配置的策略供选择
调度器策略
- 三种调度器
- FIFO Scheduler(先进先出调度器)
- Capacity Scheduler(容量调度器)
- Fair Scheduler(公平调度器)
- Apache版本YARN
默认使用Capacity Scheduler
- 可以
在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置
FIFO Scheduler
概述
- Hadoop 1.x中JobTracker原有的调度器实现
先进先出
的思想,即先提交的应用先运行
- 调度工作不考虑优先级和范围,适用于负载较低的小规模集群
- 当使用大型共享集群时,它的效率较低且会导致一些问题
- 拥有一个控制全局的队列queue,默认queue名称为default
- 调度器会获取当前集群上所有的资源信息作用于这个全局的queue
优点
无需配置、先到先得、易于执行
缺点
任务的优先级不会变高,因此高优先级的作业需要等待
不适合共享集群
Capacity Scheduler
概述
- 容量调度是Apache Hadoop3.x默认调度策略
- 该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力
- 为每个组织分配专门的队列,然后再为每个队列分配集群资源(通过设置多个队列的方式给多个组织提供服务)
- 理解成一个个的资源队列,这个资源队列是用户自己去分配的,队列内部又可以垂直划分(共享队列资源)
- 在
一个队列内部,资源的调度是采用的是先进先出(FIFO)策略
划分
以队列为单位划分资源
简单通俗点来说,就是一个个队列有独立的资源,队列的结构和资源是可以进行配置的
优点
- 层次化的队列设计:层次化的管理,可以更容易、更合理分配和限制资源的使用
- 容量保证:每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源
- 安全:每个队列有严格的访问控制,用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务
- 弹性分配:空闲的资源可以被分配给任何队列,当多个队列出现争用的时候,则会按照权重比例进行平衡
Fair Scheduler
概述
公平调度
,提供了YARN应用程序公平地共享大型集群中资源
的另一种方式- 使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额
- 是为所有的应用分配公平的资源(对公平的定义通过参数来设置)
- 可以在多个队列间工作,允许资源共享和抢占
优势
- 分层队列:
- 队列可以按层次结构排列以划分资源,并可以配置权重以按特定比例共享集群
- 基于用户或组的队列映射:
- 可以根据提交任务的用户名或组来分配队列
- 如果任务指定了一个队列,则在该队列中提交任务
- 资源抢占:
- 根据应用的配置,抢占和分配资源可以是友好的或是强制的
- 默认不启用资源抢占
- 保证最小配额:
- 可以设置队列最小资源,允许将保证的最小份额分配给队列,保证用户可以启动任务
- 当队列不能满足最小资源时,可以从其它队列抢占
- 当队列资源使用不完时,可以给其它队列使用
- 这对于确保某些用户、组或生产应用始终获得足够的资源
- 允许资源共享
- 即当一个应用运行时,如果其它队列没有任务执行,则可以使用其它队列
- 当其它队列有应用需要资源时,再将占用的队列释放出来
- 所有的应用都从资源队列中分配资源
- 默认不限制每个队列和用户可以同时运行应用的数量
- 可以配置来限制队列和用户并行执行的应用数量
- 限制并行执行应用数量不会导致任务提交失败,超出的应用会在队列中等待
评论区