【Hadoop】YARN容量调度器详解

🦄 个人主页—🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁

🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁

目录

一、CapacityScheduler简介

二、CapacityScheduler特性

三、CapacityScheduler配置

四、YARN WEB UI 参数详解


一、CapacityScheduler简介


Hadoop YARN的核心组件是ResourceManager,负责集群资源管理与调度,而ResourceManager组件的核心是调度器,负责统筹集群资源,满足应用的资源需求。调度器不仅需要优化整个集群的资源布局,避免热点等问题对应用的影响,最大程度利用集群资源;还要能协调好大量应用在集群的运行,基于多租户(队列)公平性、应用优先级等策略解决好资源竞争等问题;也要能满足个别应用在节点依赖、放置策略等方面的特殊需求。

YARN调度器是可拔插的插件,主要有FIFOScheduler、FairScheduler和CapacityScheduler三类。

  • FIFOScheduler:是最简单的调度器,不支持多租户(所有应用都提交到Default队列),不考虑集群的资源分布(节点上堆叠调度),只支持以FIFO(First In,First Out)策略依次调度应用,无其他控制与调度特性。只适用于及其简单的场景,因此很少应用于正式生产。
  • FairScheduler:是CDH(Cloudera Distributed Hadoop)的默认调度器,与HDP(Hortonworks Data Platform)合并后的CDP(Cloudera Data Platform)不再使用(迁移到CapacityScheduler),Apache Hadoop社区也建议迁移到CapacityScheduler。FairScheduler支持较为完善的多租户管理与资源调度能力,包括多级队列、配额管理、ACL控制、弹性资源共享、租户间公平性调度策略、租户内应用调度策略、资源预留、抢占、异步调度等,然而在Apache Hadoop社区的发展相比CapacityScheduler仍稍显落后,核心调度未考虑整个集群的资源布局,也不支持Node Labels(分区调度)、Node Attributes(节点打标调度)、Placement Constraints(放置约束)等调度特性。
  • CapacityScheduler:是Apache Hadoop社区、HDP(Hortonworks Data Platform)及合并后CDP(Cloudera Data Platform)的默认调度器,具有最完善的多租户管理与资源调度能力,不仅包含了FairScheduler的全部能力,还能协调好整个集群的资源布局(基于Global Scheduling),减少热点概率,最大程度利用集群资源,还支持Node Labels(分区调度)Node Attributes(节点打标调度)、Placement Constraints(放置约束)等调度特性。

下面重点对CapacityScheduler进行介绍,其他调度器的使用说明请参考社区文档。


二、CapacityScheduler特性


  • 分层队列——支持分层队列,以确保在允许其他队列使用空闲资源之前,在组织的子队列之间共享资源,从而提供更多的控制和可预测性。
  • 容量保证——队列被分配了网格容量的一小部分,在某种意义上,一定容量的资源将供它们使用。提交到队列的所有应用程序都可以访问分配给队列的容量。管理员可以对分配给每个队列的容量配置软限制和可选的硬限制,就是可以使用其他队列的剩余资源,也可以严格限制不能超出限制。
  • 安全性——每个队列都有严格的acl,它控制哪些用户可以向各个队列提交应用程序。此外,还有安全防护措施,以确保用户不能查看和/或修改来自其他用户的应用程序。此外,还支持每个队列和系统管理员角色。
  • 弹性资源共享——可以将空闲资源分配给超出其容量的任何队列。当队列配置资源有空闲时,可以分配给其他有资源需求的队列。当再次需要这些资源时可以抢夺回这些资源。这确保了资源以可预测和弹性的方式对队列可用,从而防止集群中人为的资源孤岛,从而有助于利用率。
  • 多租户——提供了一组全面的限制,以防止单个应用程序、用户和队列独占队列或整个集群的资源,以确保集群不会不堪重负。
  • 可操作性
    • 运行时配置——管理员可以在运行时以安全的方式更改队列定义和属性(如容量、acl),以尽量减少对用户的干扰。此外,还为用户和管理员提供了一个控制台,以查看系统中各种队列的当前资源分配情况。管理员可以在运行时添加额外的队列,但不能在运行时删除队列,除非队列已停止并且没有挂起/正在运行的应用程序。
    • 取消应用程序——管理员可以在运行时停止队列,以确保在现有应用程序运行到完成时,没有新的应用程序可以提交。如果队列处于STOPPED状态,则不能将新的应用程序提交给它自己或它的任何子队列。现有的应用程序将继续完成,因此可以正常地耗尽队列。管理员还可以启动已停止的队列。
  • 基于资源的调度——支持资源密集型应用程序,其中应用程序可以选择指定比默认值更高的资源需求,从而容纳具有不同资源需求的应用程序。目前,内存是支持的资源需求。
  • 优先级调度——该功能允许应用程序以不同的优先级提交和调度。整数值越大,优先级越高。目前,应用程序优先级仅支持FIFO排序策略。
  • 绝对资源配置——管理员可以为队列指定绝对资源,而不是提供基于百分比的值。这为管理员提供了更好的控制,以便为给定队列配置所需的资源量。

三、CapacityScheduler配置


Ambari 2.7.4配置页面

配置队列层级如下:

root
├── acc
└── ipva
├── bzv2
└── default

Ambari-queue-manager配置如下:

capacity-scheduler.xml 配置文件

 
  <configuration  xmlns:xi="http://www.w3.org/2001/XInclude">
    <!-- 设置所有提交的job中ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的job数量。-->
    <property>
      <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
      <value>0.2</value>
    </property>
    
    <!-- 最多可运行的应用数,默认10000 -->
    <property>
      <name>yarn.scheduler.capacity.maximum-applications</name>
      <value>10000</value>
    </property>
    
    <!--  队列本地延迟设置,根据机架感知,对于有nodemanager的客户端,会优先考虑向本地的nodemanager派发task,该值用于配置,默认尝试次数为40次 -->
    <property>
      <name>yarn.scheduler.capacity.node-locality-delay</name>
      <value>40</value>
    </property>
    
    <!-- 该配置指定调度器使用的资源计算器,资源计算器用于在调度器中比较资源。默认值是 org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator,只使用内存进行比较
    DominantResourceCalculator 用 Dominant-resource比较多维度资源,如内存,CPU等-->
    <property>
      <name>yarn.scheduler.capacity.resource-calculator</name>
      <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
    </property>
    
    <!--  访问控制,控制谁可以管理(包括提交和取消)该队列的任务,表示任何人  -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.acl_administer_queue</name>
      <value>*</value>
    </property>
	
    <!-- 限定哪些用户/用户组可向给定队列中提交应用程序  -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.acl_submit_applications</name>
      <value>*</value>
    </property>
	
    <!-- acc 队列资源比例 -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.capacity</name>
      <value>60</value>
    </property>
	
    <!--  acc 队列最大资源比例 -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.maximum-capacity</name>
      <value>70</value>
    </property>
	
    <!-- 指定队列内单个用户的最小资源比例(相对于队列保障资源),队列内单个用户的资源限制=max(队列保障资源/用户数, 队列保障资源 * minimumUserLimitPercent / 100), 默认值:100。 -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.minimum-user-limit-percent</name>
      <value>100</value>
    </property>
    
    <!-- 指定队列内应用调度策略,包括Fifo与Fair两种,Fifo即先入先出调度,对所有应用按优先级从高到低、提交时间从前往后的顺序排序,
	   Fair是公平调度,对所有应用按资源使用比例从小到大、提交时间从前往后的顺序排序。默认值:Fifo, 一般应用场景配置成Fair更合适。 -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.ordering-policy</name>
      <value>fifo</value>
    </property>
    
    <!-- acc 队列优先级 ,默认值0 -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.priority</name>
      <value>0</value>
    </property>
	
    <!-- 指定队列状态,默认值:RUNNING。通常不需要配置,只有在需要删除队列的时候,修改指定队列的状态为STOPPED,待队列下应用全部结束后队列将会被自动删除。 -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.state</name>
      <value>RUNNING</value>
    </property>
	
    <!-- acc 队列内单个用户的资源上限因子,队列内单个用户最大可用资源=min(队列最大资源, yarn.scheduler.capacity.xx.capacity * userLimitFactor),默认值:1.0。  -->
    <property>
      <name>yarn.scheduler.capacity.root.acc.user-limit-factor</name>
      <value>1.5</value>
    </property>
	
    <!-- root 队列可以访问的label列表,默认不配置,访问所有无标签的  -->
    <property>
      <name>yarn.scheduler.capacity.root.accessible-node-labels</name>
      <value>*</value>
    </property>
	
    <!-- 为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。 -->
    <property>
      <name>yarn.scheduler.capacity.root.acl_administer_queue</name>
      <value>yarn,spark,hive</value>
    </property>
	
    <!-- 限定用户/用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序 -->
    <property>
      <name>yarn.scheduler.capacity.root.acl_submit_applications</name>
      <value>yarn,ambari-qa</value>
    </property>
	
    <!-- bz2 队列 与acc 类似  -->
	  <!-- ipva 队列 与acc 类似  -->
	  <!-- 省略部分  -->
   
    <!-- root根下的 子队列 -->
    <property>
      <name>yarn.scheduler.capacity.root.queues</name>
      <value>acc,bz2,default,ipva</value>
    </property>
    
  </configuration>

关键参数说明:

yarn.scheduler.capacity.root.acc.capacity队列资源容量的百分比,用浮点数表示(如12.5)或者是作为绝对资源队列的最小容量。在各层级上所有队列的百分比之和必须等于100。

yarn.scheduler.capacity.root.acc.maximum-capacity最大队列容量,以百分比(%)表示为浮点数,或以绝对资源队列最大容量表示。这限制了队列中应用程序的弹性。1)取值范围为0 ~ 100。2)管理员需要确保绝对最大容量>=每个队列的绝对容量。此外,将此值设置为-1将最大容量设置为100%。

yarn.scheduler.capacity.root.acc.user-limit-factor: 这个参数配置为允许单个用户最多能获取的队列资源(即yarn.scheduler.capacity..capacity的值)的倍数,值是一个浮点值。也就是说如果把这个参数设置为大于1时,用户使用的资源可以超过队列资源。如果该值为2.0,则单个用户使用的最多资源量可以是该队列容量的2倍,但无论配置为多大都不能超过队列的最大资源(即yarn.scheduler.capacity..maximum-capacity的值)。默认值为1,确保单个用户无论集群有多空闲,永远不会占用超过队列配置的资源量。


四、YARN WEB UI 参数详解


如下图 点击 Scheduler可以看到在 Ambari 页面上配置的层级队列

如下是acc 队列的使用情况,不用 队列使用不用的颜色显示

资源说明

  • 总内存资源: 101.25*1024 = 103680M
  • acc队列容量:103680*60% = 62208M
  • acc队列容量最大:103680*70% = 72575M

显示

解释

Queue State: RUNNING

队列状态 RUNNING

Used Capacity : 78.2%

已使用资源占队列配置值的百分比48640/62208=78.2%

Effective Capacity: memory:62208, vCores:36> (60.0%)

有效容量,表示队列实际可用的内存和虚拟核心资源

分别为 62208 MB 和 36 个。

Effective Max Capacity: 72575, vCores:41> (70.0%)

有效最大容量,表示队列实际可用的内存和虚拟核心资源分别为 72575 MB 和 41 个。

Absolute Used Capacity: 46.9%

已使用绝对容量 48640/103680=46.9%

Absolute Configured Capacity: 60.0%

表示队列在整个集群中占据配置容量60%。

Absolute Configured Max Capacity: 70.0%

表示队列在整个集群中占据最大配置容量70%。

Used Resources: <48640, vCores:15>

acc 队列使用 资源

Configured Max Application Master Limit: 20.0

AppMaster 限制使用资源 20%

Max Application Master Resources: <memory:14848, vCores:1>

表示每个 Application Master 最多可以使用 2560 MB 内存和 1 个虚拟核心资源

Used Application Master Resources: <memory:1024, vCores:1>

AppMaster 资源使用 1核1G

Max Application Master Resources Per User: <memory:14848, vCores:1>

表示每个用户的 Application Master 最多可以使用 14848MB 内存和 1 个虚拟核心资源。

Num Schedulable Applications: 1

调度的App调用个数为 1

Num Non-Schedulable Applications: 0

没有被调度的app应用个数

Num Containers: 3

容器运行 个数3

Max Applications: 6000

最大应用数量 6000

Max Applications Per User: 6000

每个user最多可以运行的应用数量 6000

Configured Minimum User Limit Percent: 100%

每个user最多可以使用队列资源的百分比

Configured User Limit Factor: 1.5

最多能获取的队列资源的1.5倍

Accessible Node Labels: *

标签策略 为匹配所有

Ordering Policy: FifoOrderingPolicy

队列内部任务采用策略Fifo

参考文章:


什么是YARN调度器_开源大数据平台E-MapReduce-阿里云帮助中心

【深入浅出 Yarn 架构与实现】 Yarn 三种调度器_yarn调度器-CSDN博客

yarn web ui 参数详解 - gentleman_hai - 博客园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/127153.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chrony的基本原理

介绍 &#xff08;1&#xff09;Chrony是一个用于计算机系统时钟同步的程序。它使用网络时间协议NTP来与远程时间服务器通信&#xff0c;根据这些服务器提供的时间信息来调整系统时钟。Chrony具有高精度&#xff0c;可配置&#xff0c;易使用等特点。 &#xff08;2&#xff…

集成MCU的OTP-2.4G合封芯片XL2401D,收发一体 上手简单

芯岭技术的XL2401D是一颗2.4G合封芯片&#xff0c;收发一体。合封芯片可以很好的节省PCB面积和开发成本。一颗芯片可以做到之前两颗芯片才能做到的事情。XL2401D内含MCU为九齐NY8A054E。有九齐MCU开发经验的话开发起来非常容易上手。 XL2401D芯片是工作在2.400~2.483GHz世界通…

11.7加减计数器,可置位~,数字钟分秒,串转并,串累加转并,24位串并128,流水乘法器,一些乘法器

信号发生器 方波&#xff0c;就是一段时间内都输出相同的信号 锯齿波就是递增 三角波就是先增后减 加减计数器 当mode为1则加&#xff0c;Mode为0则减&#xff1b;只要为0就输出zero 这样会出问题&#xff0c;因为要求是十进制&#xff0c;但是这里并没有考虑到9之后怎么办&a…

分享76个Python管理系统源代码总有一个是你想要的

分享76个Python管理系统源代码总有一个是你想要的 下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8888 项目名称 cms是一个基于kubernetes官方python SDKkubernetes开发的一个容器运维系统 Django erp 后台管理系统&#xff0c;仅限学习使用&#xff0c;不…

边缘计算如何改变数据存储?

边缘计算在整个价值链中提供多种优势——从降低成本到提高效率再到安全数据传输。该技术允许在源头收集和分析相关数据&#xff0c;这有助于减少延迟和带宽成本&#xff0c;同时显著提高计算过程的冗余系数和效率。 通过降低数据传输成本和损失&#xff0c;边缘计算帮助企业实现…

【MySQL习题】各个视频的平均完播率【全网最详细教学】

目录 数据表描述 问题描述 输出示例 解题思路【重点】 正解代码 数据表描述 有以下两张表&#xff1a; 表1&#xff1a;用户-视频互动表tb_user_video_log 数据举例&#xff1a; 说明&#xff1a; uid-用户ID,video_id-视频ID start_time-开始观看时间end_time-结束观…

【AI】自回归 (AR) 模型使预测和深度学习变得简单

自回归 (AR) 模型是统计和时间序列模型&#xff0c;用于根据数据点的先前值进行分析和预测。这些模型广泛应用于各个领域&#xff0c;包括经济、金融、信号处理和自然语言处理。 自回归模型假设给定时间变量的值与其过去的值线性相关&#xff0c;这使得它们可用于建模和预测时…

Unity 跑酷游戏全部脚本(完结)

脚本1 触发器脚本 这个脚本是主角身上的脚本&#xff0c;用于检测是否碰到其他触发器&#xff0c;并做出对应的行为 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColliidisonTrigger : MonoBehaviour { //触发检测 …

docker部署mysql nginx redis

一.创建网络 # 创建网络 docker network create liming # 查看网络 docker network ls二.部署mysql 删除并重新创建mysql容器&#xff0c;并完成本地目录挂载&#xff1a; 挂载/software/mysql/data到容器内的/var/lib/mysql目录挂载/software/mysql/init到容器内的/docker-…

玄子Share-HTML5知识手册

玄子Share-HTML5知识手册 前言&#xff1a; 这一版 HTML 笔记&#xff0c;算是我写的第四版了&#xff0c;第三版对照课本编写&#xff0c;第四版则是对照 MDN 官方文档编写&#xff0c;不论是术语亦或专业性&#xff0c;都更上一层 文章依托 MDN 文档&#xff0c;拓展了大量课…

网络营销利器:海外IP代理如何助力你的网络营销?如何选择?

在当今数字化的时代&#xff0c;网络营销已经成为企业营销策略的重要组成部分。而对于进去海外市场的跨境玩家来说&#xff0c;海外的推广营销是重中之重。然而&#xff0c;在开展网络营销的过程中&#xff0c;我们常常会遇到各种挑战&#xff0c;如地域限制、访问速度慢等。 …

理解透彻API接口电商API接口有哪些?你需要一分钟看这篇文章

什么是API呢&#xff1f;老实说啊&#xff0c;象征非常基础的概念&#xff0c;我原本以为大家都已经非常接楚&#xff0c;但是被突然这么一问呢&#xff0c;觉得有必要来认真复习一下这个概念&#xff0c;因为在我看来啊&#xff0c;技术上的问题呢&#xff0c;就没有高低贵贱之…

Docker Desktop 和 WSL2 位置迁移

迁移 WSL2 安装位置 WSL2 默认安装在 C 盘&#xff0c;我们可以通过以下步骤迁移安装位置 通过以下命令列出已安装的 Linux 发行版&#xff1a; wsl -l -v可以看到已安装了 Ubuntu-22.04&#xff0c;其运行状态为&#xff1a;Stopped 如果运行状态为 Running&#xff0c;需…

洛谷 Equalize the Remainders

洛谷没提供中文题面&#xff0c;这里大致翻译一下&#xff1a; 可以进行的操作&#xff1a;任选一个数加一。 一共有n个整数&#xff0c;还有一个约数m&#xff0c;n个数都对m进行求余&#xff0c;累计余数的数量&#xff0c;要求每个余数都有n/m个。 对于样例1的输入&#xff…

JavaScript使用Ajax

Ajax(Asynchronous JavaScript and XML)是使用JavaScript脚本&#xff0c;借助XMLHttpRequest插件&#xff0c;在客户端与服务器端之间实现异步通信的一种方法。2005年2月&#xff0c;Ajax第一次正式出现&#xff0c;从此以后Ajax成为JavaScript发起HTTP异步请求的代名词。2006…

bilibili快速升满级(使用Docker 容器脚本)

部署bilibili升级运行容器脚本 docker run --name"bili" -v /bili/Logs:/app/Logs -e Ray_DailyTaskConfig__Cron"30 9 * * *" -e Ray_LiveLotteryTaskConfig__Cron"40 9 * * *" -e Ray_UnfollowBatchedTaskConfig__Cron"…

传来喜讯,优维又获奖了!!!

优维科技作为国内DevOps领域的行业领先企业&#xff0c;从诞生之日起&#xff0c;就一直致力于为中国企业提供一流的数字化运维服务&#xff0c;不断深耕核心技术&#xff0c;向客户提供专业强大的产品与服务。多年来&#xff0c;不仅获得了大量客户认可&#xff0c;更是屡次获…

宠物商城系统

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 宠物商城系统&#xff0c;支持登录、注册、浏览、搜索、详情页、加入购物车。比较简单

WPS的JS宏基础(二)

数据的输入和输出 InputBox(‘请输入内容’) //输入框 alert(‘a’) //简单消息框 MsgBox(‘b’) //进阶消息框 Debug.Print(‘c’) //立即窗口 Console.log(‘d’) //立即窗口 编写规则与注释 1.严格遵循大小写规范 2.每条语句之间用分号分隔 3.复合语句块&#xff08;块中…
最新文章