当前位置:网站首页>YARN功能介绍、交互流程及调度策略
YARN功能介绍、交互流程及调度策略
2022-08-03 19:59:00 【蜜桃上的小叮当】
文章目录
YARN介绍
- YARN是一个通用的资源管理系统及调度平台。
YARN功能
- 资源管理系统:集群的硬件资源,和程序运行相关,比如内存、CPU等(磁盘存储管理是HDFS)。
- 调度平台:多个程序同时申请计算资源如何分配,调度的规则(算法)。
- 通用性:不仅仅支持MapReduce程序,还能支持其他各种计算程序(Spark Flink)。YARN只关心你要资源,不管你是什么计算引擎,在有的情况下分发,用完即回收。
YARN架构图
- 下图为官方架构图
- 官方架构图中的组件:
ResourceManager、NodeManager(群集物理层面)、ApplicantMaster(APP层面)、Client、Container容器(资源抽象)。
YARN三大组件介绍
- ResourceManager(RM)
YARN中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源。 - NodeManager(NM)
YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。 - ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM。应用程序内的老大,负责程序内部各阶段的资源申请,监督程序的执行情况。
YARN交互流程
核心交互流程
- MR作业提交 Client --> RM
- 资源的申请 MRAppMaster–>RM
- MR作业状态汇报 Container(Map or Reduce Task)–>Container(MRAppMaster)
- 节点汇报 NM --> RM
整体交互过程
- 用户通过客户端向YARN中ResourceManager提交应用程序
- ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster。
- ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过ResourceManage查看应用程序的运行状态。
- AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态。
- 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
- NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
- 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让 ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
- 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
YARN资源调度策略
YARN资源调度
- 在理想情况下,应用程序提出的请求将立即得到YARN批准。但是实际中,资源是有限的,并且在繁忙的群集上,应用程序通常将需要等待其某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源
- 在YARN中,负责给应用分配资源的就是Scheduler,它是ResourceManager的核心组件之一。Scheduler完全专用于调度作业,而自身无法跟踪应用程序的状态。
调度策略
- 三种调度策略:FIFO Scheduler(先进先出调度器)、Capacity Scheduler(容量调度器)、Fair Scheduler(公平调度器)。
- 当前版本Apache YARN默认使用Capacity Scheduler。同样可以在yarn-site.xml文件中yarn.resourcemanager.scheduler.class配置调度策略。
FIFO Scheduler
- FIFO Scheduler是Hadoop1.x版本中JobTracker原有的调度器实现,此调度器在YARN中保留了下来。先进先出,先提交先运行。调度工作不考虑优先级和范围,适用于负载较低的小规模群集。FIFO Scheduler拥有一个控制全局的队列queue,默认queue名称为default,该调度器会获取当前集群上所有的资源信息作用于这个全局的queue。
- 优点:无需配置、先到先得、易于执行。
- 缺点:任务的无高优先级,因此高优先级的作业需要等待,不适合共享群集。
Capacity Scheduler
- Capacity Scheduler是Apache Hadoop3.x版本默认调度策略。该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。Capacity可以理解成一个个的资源队列,这个资源队列是用户自己去分配的。队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。
- Capacity Scheduler调度器以队列为单位划分资源。简单通俗点来说,就是一个个队列有独立的资源,队列的结构和资源是可以进行配置的。
- Capacity Scheduler特性优势
层次化的队列设计:层次化的管理,可以更容易、更合理分配和限制资源的使用
容量保证:每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源。
安全:每个队列有严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。
弹性分配:空闲的资源可以被分配给任何队列,当多个队列出现争用的时候,则会按照权重比例进行平衡。
Fair Scheduler
- Fair Scheduler叫做公平调度,提供了YARN应用程序公平地共享大型集群中资源的另一种方式。使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额(一般来说商用Hadoop会使用)。
- Fair Scheduler设计目标是为所有的应用分配公平的资源(对公平的定义通过参数来设置)。
- 公平调度可以在多个队列间工作,允许资源共享和抢占。
- Fair Scheduler特性优势
分层队列:队列可以按层次结构排列以划分资源,并可以配置权重以按特定比例共享集群。
基于用户或组的队列映射:可以根据提交任务的用户名或组来分配队列。如果任务指定了一个队列,则在该队列中提交任务。
资源抢占:根据应用的配置,抢占和分配资源可以是友好的或是强制的。默认不启用资源抢占。
保证最小配额:可以设置队列最小资源,允许将保证的最小份额分配给队列,保证用户可以启动任务。当队列不能满足最小资源时,可以从其它队列抢占。
允许资源共享:即当一个应用运行时,如果其它队列没有任务执行,则可以使用其它队列,当其它队列有应用需要资源时,再将占用的队列释放出来。
默认不限制每个队列和用户可以同时运行应用的数量。
边栏推荐
猜你喜欢
随机推荐
那些年我写过的语言
WPF .cs中使用资源文件中的ControlTemplate或Style并找到控件
利用 rpush 和 blpop 实现 Redis 消息队列
子结点的数量(2)
利用net-snmp的库实现snmpget,snmpset
LeetCode 1374. 生成每种字符都是奇数个的字符串
ECCV2022 | 用于视频问题回答的视频图Transformer
(十六)51单片机——红外遥控
极验深知v2分析
汉源高科8光口12电口交换机千兆8光8电12电16电网管型工业以太网交换机
Redis 内存满了怎么办?这样置才正确!
Mapper输出数据中文乱码
标准C语言学习总结11
自定义form表单验证
LeetCode 622. Designing Circular Queues
信使mRNA甲基化偶联3-甲基胞嘧啶(m3C)|mRNA-m3C
开源生态研究与实践| ChinaOSC
Benchmarking Lane-changing Decision-making for Deep Reinforcement Learning
【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针)
CSDN帐号管理规范