【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 - 博客园
相关文章:

【Hadoop】YARN容量调度器详解
🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁&am…...

20个Python实用小技巧!来自十年老程序员的推荐~
文章目录 1.用itertools排列2.单行条件表达式3. 反转字符串4. 使用 Assert 处理异常5. 对多个输入使用拆分6. 用 zip() 转置矩阵7. 资源上下文管理器8. 下划线作为分隔符9. 尝试 f 字符串格式10.用这个技巧交换整数11. 使用 lambda 代替函数12.多次打印无循环13. 将字符串解包为…...

jenkins原理篇——成员权限管理
大家好,我是蓝胖子,前面几节我讲述了jenkins的语法以及我是如何使用jenkins对测试和正式环境进行发布的。但正式环境使用jenkins还有一点很重要,那就是权限管理。正式环境的权限往往不能对所有人开放,以及要做到每次发布都是谁在操…...

13.求面积[有问题]
#include<stdio.h> #include<math.h> #include<bits/stdc.h> using namespace std;void fun(double a,b,c) {double p,c;p (abc)/2;c sqrt(p*(p-a)*(p-b)*(p-c));printf("面积是:%lf",c); }int main(){double a,b,c;scanf("%lf,%…...
【力扣】面试经典150题——哈希表
文章目录 383. 赎金信205. 同构字符串290. 单词规律 383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符…...

Python批量导入及导出项目中所安装的类库包到.txt文件(补充)
Python批量导入及导出项目中所安装的类库包到.txt文件 生成requirements文件 建议使用,该方式形成文档最简洁: pip list --formatfreeze > requirements.txt...

2023 全栈工程师 Node.Js 服务器端 web 框架 Express.js 详细教程(更新中)
Express 框架概述 Express 是一个基于 Node.js 平台的快速、开放、极简的Web开发框架。它本身仅仅提供了 web 开发的基础功能,但是通过中间件的方式集成了外部插件来处理HTTP请求,例如 body-parser 用于解析 HTTP 请求体,compression 用于压…...

【Leetcode】【数据结构】【C语言】判断两个链表是否相交并返回交点地址
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *tailAheadA;struct ListNode *tailBheadB;int count10;int count20;//分别找尾节点,并顺便统计节点数量:while(tailA){tailAtailA->next;c…...

Selenium爬取内容并存储至MySQL数据库
前面我通过一篇文章讲述了如何爬取博客摘要等信息。通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的。这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库MySQL中,以便对数据进行分析,比如分析哪个时间段…...
蓝桥等考C++组别六级 007
第一部分:选择题 1、C L6 (15分) 计算一个正整数除以3的余数,以下选项正确的是( )。 A. int m; cin >> m; switch (m % 3) { default: cout << "remainder is 1"; break;// 余…...

集合框架:Set集合的特点、HashSet集合的底层原理、哈希表、实现去重复
Set集合的特点 Set(集合)是一种无序的、不重复的数据结构,它的特点如下: 1. 集合中的元素是无序的:Set 中的元素没有顺序,无法通过索引来访问。 2. 集合中的元素是唯一的:Set 中不允许有重复…...

【T690 之十二】基于方寸EVB2开发板(T690芯片)构建基于GMSSL的文件系统的方式
备注: 1,假设您已对方寸微电子的T690系列芯片的使用方式都有了一定的了解,然后需要构建基于GMSSL的文件系统,此文才对您有意义; 2,若您对方寸微电子的T690芯片不了解,但想进一步了解它ÿ…...
使用Selenium发邮件附件
发邮件可以使用SMTP协议实现程序去发送,但附件的不能太大,一般不超过20M。 以下使用Selenium模拟发送邮件,跳过这个限制,网上找了很多资料,都没有完整实现的,那么自己实现一个,以下代码用Python…...

公共数据这座金矿,授权运营为何是赋能的关键路径?
数据要素市场化正开启下一个关键阶段。 自2014年大数据写入政府工作报告,到全国各地大数据交易所涌现,再到《数据二十条》颁布,中国数据要素产业探索之路已走过近十载。如今,国家大数据局正式成立,更是标志着数据要素…...

昇腾CANN 7.0 黑科技:大模型推理部署技术解密
CANN作为最接近昇腾AI系列硬件产品的一层,通过软硬件联合设计,打造出适合昇腾AI处理器的软件架构,充分使能和释放昇腾硬件的澎湃算力。针对大模型推理场景,CANN最新发布的CANN 7.0版本有机整合各内部组件,支持大模型的…...
OAuth 2.0
OAuth 2.0 是一种授权机制,允许应用程序访问第三方服务的用户数据,而不需要用户提供用户名和密码。其原理包括以下几个步骤: 应用程序向第三方服务请求授权,并提供自己的身份信息。 第三方服务向用户展示授权请求的具体内容和应用…...

7个设计师必备的Figma汉化插件,高效设计超简单!
Figma是一个著名的在线设计工具,拥有来自全球各地的超多设计师都在用,粉丝多多。其强大和灵活的设计功能使许多设计师都喜欢使用它。然而,为了进一步提高设计效率和扩展功能,许多开发人员开发了各种有用的Figma设计的汉化插件。在…...

缓存-基础理论和Guava Cache介绍
缓存-基础理论和Guava Cache介绍 缓存基础理论 缓存的容量和扩容 缓存初始容量、最大容量,扩容阈值以及相应的扩容实现。 缓存分类 本地缓存:运行于本进程中的缓存, 如Java的 concurrentHashMap, Ehcache,Guava Cache。 分布式缓…...

机器人伺服驱动控制环
伺服驱动器的控制环,包括:位置环、速度环、电流环这三种类型。 对于伺服的控制回路,内侧控制环的响应带宽一般会是外侧控制环的5到10倍。也就是说,电流环带宽大致是速度环的5到10倍,速度环带宽则约为位置环的5到10倍…...

单链表(3)
现在有一个指针p,指向数据2所在的结点的地址——那么如何访问这个数据2 前面说过指针访问数据成员使用的是 指向符->。则访问这个数据2就是——p->data.因为p一开始就指向数据2的结点地址了 那么如何访问数据3,4往后等等 访问3就是——p->next->data…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...