【大数据】YARN调度器及调度策略
YARN调度器
YARN负责作业资源调度,在集群中找到满足业务的资源,帮助作业启动任务,管理作业的生命周期。

YARN技术架构
目前,Hadoop作业调度器主要有三种:先进先出调度器(First In First Out)、容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)。
Apache Hadoop-1.x 默认调度器为先进先出调度器(First In First Out);
Apache-Hadoop-2.7.2 之后默认调度器是容量调度器(Capacity Scheduler);
Apache-Hadoop-3.2.2 默认调度器是公平调度器(Fair Scheduler)。
1.先进先出调度器
FIFO调度器(First In First Out): 单队列,根据提交作业的先后顺序,先到先得。

1.1 先进先出调度器的特点
-
无需任何配置,作业按照先来后到分配资源,但会出现小任务被大任务阻塞的情况。
2.容量调度器
Yahoo开发的多用户调度器,容量调度器每个队列内部先进先出,同一时间队列中只有一个任务在执行,队列的并行度为队列的个数。

2.1 容量调度器特点
-
多队列:每隔队列可以配置一定的资源量,每个队列内部采用先进先出的调度策略。
-
容量保证:管理员可为每个队列设置资源最低保证和资源使用上限。
-
资源灵活:如果一个队列中的资源有剩余,可以暂时共享给哪些需要资源的队列,而一旦该队列有新的作业提交,则其他队列借调的资源会归还给该队列。
-
多租户:支持多用户共享集群和多作业同时运行;为了防止一个用户的作业独占队列中的资源,可以对用户提交作业所使用的资源进行限定。
2.2 容量调度器配置模板
容量调度器的配置文件是 capacity-scheduler.xml。
| 参数名称 | 说明 |
|---|---|
| capacity | 队列容量百分比 (%),每个级别的所有队列的容量总和必须等于 100,该值也可以配置为绝对资源,如 [memory=10240,vcores=12],这表示 10GB 内存和 12 个 VCore。 |
| maximum-capacity | 队列容量最大百分比(%),需要确保每个队列的绝对最大容量大于等于绝对容量。此外,将此值设置为 -1 会将最大容量设置为 100%,也可以设置为绝对资源。 |
| maximum-allocation-mb | 每个队列在资源管理器上分配给每个容器请求的最大内存限制。此设置覆盖集群配置 yarn.scheduler.maximum-allocation-mb。该值必须小于等于集群最大值。 |
| maximum-allocation-vcores | 每个队列在资源管理器中分配给每个容器请求的虚拟内核的最大限制。此设置会覆盖集群配置 yarn.scheduler.maximum-allocation-vcores。该值必须小于或等于集群最大值。 |
| user-settings.[user-name].weight | 此浮点值用于计算队列中的用户限制资源值。该值将使每个用户的权重大于或小于队列中的其他用户。例如,如果用户 A 在队列中接收的资源比用户 B 和 C 多 50%,则用户 A 的此属性将设置为 1.5。用户 B 和 C 将默认为 1.0。 |
| minimum-user-limit-percent | 如果有资源需求,每个队列都会在任何时刻强制限制分配给用户的资源百分比。用户限制可以在最小值和最大值之间变化,但不会小于此设置值。例如,假设该属性的值为 25,如果两个用户向一个队列提交了应用程序,则没有一个用户可以使用超过 50% 的队列资源。如果第三个用户提交程序,则没有一个用户可以使用超过 33% 的队列资源。对于 4 个或更多用户,任何用户都不能使用超过 25% 的队列资源。值为 100 表示不施加用户限制,默认值为 100,值指定为整数。 |
<property><name>yarn.scheduler.capacity.root.queues</name> // 队列列表,新增加的队列需要在这个配置项中添加<value>a,b,c</value><description>当前等级的队列,root表示根队列</description>
</property>
<property><name>yarn.scheduler.capacity.root.a.queues</name> // 子队列配置<value>a1,a2</value><description>当前等级的队列,root表示根队列</description>
</property>
<!--子队列样例 test-->
<property><name>yarn.scheduler.capacity.root.test.capacity</name><value>3</value>
<description>test队列在默认标签下标准队列容量,各个队列该属性相加必须等于100</description>
</property>
<property><name>yarn.scheduler.capacity.root.test.maximum-capacity</name><value>4.5</value><description>test队列在默认标签下最大队列容量,当其他队列空闲时,可以占用空闲的资源。通常该值给上边标准容量值的1.5倍,该属性相加不用等于100</description>
</property>
<property><name>yarn.scheduler.capacity.root.test.maximum-applications</name><value>1000</value><description>test队列最大任务提交数,通常普通租户给200左右即可</description>
</property>
<property><name>yarn.scheduler.capacity.root.test.acl_submit_applications</name><value>tdpzj</value><description>test队列的提交权限用户</description>
</property>
<property><name>yarn.scheduler.capacity.root.test.acl_administer_queue</name><value>tdpzj</value><description>test队列的管理权限用户</description>
</property>
<property><name>yarn.scheduler.capacity.root.test.state</name><value>RUNNING</value><description>test队列的状态,包括RUNNING和STOPPED状态</description>
</property>
3.公平调度器
Facebook开发的多用户调度器,

3.1 公平调度器的特点
-
多队列:每隔队列可配置一定的资源,每个队列内部采用先进先出的调度策略。
-
容量保证:管理员可为每个队列设置资源最低保证和资源使用上限。
-
资源灵活:如果一个队列中的资源有剩余,可以暂时共享给哪些需要资源的队列,而一旦该队列有新的作业提交,则其他队列借调的资源会归还给该队列。
-
多租户:支持多用户共享集群和多作业同时运行;为了防止一个用户的作业独占队列中的资源,可以对用户提交作业所使用的资源进行限定。
3.2 公平调度器配置模板
公平调度器配置文件是 fair-scheduler.xml。
| 参数名称 | 说明 |
|---|---|
| minResources | 最少资源保证量,设置格式为“X mb, Y vcores”,当一个队列的最少资源保证量未满足时,它将优先于其他同级队列获得资源,对于不同的调度策略(后面会详细介绍),最少资源保证量的含义不同,对于fair策略,则只考虑内存资源,即如果一个队列使用的内存资源超过了它的最少资源量,则认为它已得到了满足;对于drf策略,则考虑主资源使用的资源量,即如果一个队列的主资源量超过它的最少资源量,则认为它已得到了满足。 |
| maxResources | 最多可以使用的资源量,fair scheduler会保证每个队列使用的资源量不会超过该队列的最多可使用资源量。 |
| maxRunningApps | 最多同时运行的应用程序数目。通过限制该数目,可防止超量Map Task同时运行时产生的中间输出结果撑爆磁盘。 |
| minSharePreemptionTimeout | 最小共享量抢占时间。如果一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源。 |
| schedulingMode/schedulingPolicy | 队列采用的调度模式,可以是fifo、fair或者drf。 |
| aclSubmitApps | 可向队列中提交应用程序的Linux用户或用户组列表,默认情况下为“*”,表示任何用户均可以向该队列提交应用程序。需要注意的是,该属性具有继承性,即子队列的列表会继承父队列的列表。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。 |
| aclAdministerApps | 该队列的管理员列表。一个队列的管理员可管理该队列中的资源和应用程序,比如可杀死任意应用程序。 |
配置示例:
<?xml version="1.0"?>
<allocations><queue name="sample_queue"> //队列名<minResources>10000 mb,0vcores</minResources> //最小资源<maxResources>90000 mb,0vcores</maxResources> //最大资源<maxRunningApps>50</maxRunningApps> //可以同时运行的作业数<weight>2.0</weight> //权值<schedulingPolicy>fair</schedulingPolicy> //队列内部调度策略,可选的有:fair、fifo、drf 或者 继承该类的子类(org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy)<queue name="sample_sub_queue"> //队列的子目录<minResources>5000 mb,0vcores</minResources></queue></queue><user name="sample_user"> //对于特定用户的配置<maxRunningApps>30</maxRunningApps></user><userMaxAppsDefault>5</userMaxAppsDefault> //默认的用户最多可以同时运行的任务
</allocations>
4.公平调度器与容量调度器的区别
4.1 核心调度策略不同
-
容量调度器优先选择资源利用率低的队列;
-
公平调度器优先选择对资源缺额比例大的队列。
4.2 每个队列可设置的调度策略不同
-
容量调度器:FIFO、DRF(内存+CPU);
-
公平调度器:FIFO、FAIR、DRF。
5.调度策略
5.1. FIFO策略
公平调度器每个队列资源分配策略如果选择FIFO的话,此时公平调度器相当于上面讲过的容量调度器。
5.2 Fair策略
Fair 策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;如果三个应用程序同时运行,则每个应用程序可得到1/3的资源。
具体资源分配流程和容量调度器一致:选择队列、选择作业、选择容器,以上三步,每一步都是按照公平策略进行资源的分配。
5.3 DRF策略
DRF(Dominant Resource Fairness),在进行作业资源分配的分配时同时考虑内存和CPU。
例如集群中一共用100CPU和10TB的内存,作业A需要(2CPU,300GB),作业B需要(6CPU,100GB),在集群中两个作业分别需要(2%CPU,3%内存)、(6%CPU,1%内存)的资源,这表示作业A是内存主导的,作业B是CPU主导的,针对这种场景,可以考虑引入DRF策略对不同的作业进行内存和CPU的限制。
相关文章:
【大数据】YARN调度器及调度策略
YARN调度器 YARN负责作业资源调度,在集群中找到满足业务的资源,帮助作业启动任务,管理作业的生命周期。 YARN技术架构 目前,Hadoop作业调度器主要有三种:先进先出调度器(First In First Out&…...
如何快速入门Python指南
在数字化时代,掌握一门编程语言已成为众多行业和职业必备的技能之一。Python以其简洁易读的语法、丰富的库资源以及强大的跨领域应用能力,成为了初学者学习编程的理想选择。本文旨在为新手提供一套全面且深入的Python学习路径,并结合实践建议…...
vue3 页面长时间不使用,再次点击页面切换路由 操作无效报错
问题描述: 使用Vite打包构建的项目,重新部署到生产。在部署期间用户一直停留在当前项目页面(长时间无操作 半个小时),部署完成后点击页面上的路由,报错! 刷新后恢复正常。出现问题原因: 上线打…...
【算法练习】leetcode算法题合集之动态规划篇
普通动规系列 LeetCode343. 整数拆分 LeetCode343. 整数拆分 将10的结果存在索引为10的位置上,需要保证数组长度是n1,索引的最大值是n,索引是从0开始的。 n的拆分,可以拆分为i和n-i,当然i可以继续拆分。而且拆分为n-…...
青少年人工智能实验基地解决方案
1. 方案背景 1.1人工智能创新教育解决方案背景 人工智能已成为引领未来的新兴技术,中国将人工智能列为国家重点发展战略,对人工智能的发展做出了总体部署,全面加速人工智能在研发应用和人才培养的步伐。2021年1月教育部官网公布《关于政协十…...
10个让你的明星网红推广事半功倍的技巧-华媒舍
明星网红已成为市场推广和品牌宣传的重要方式。要在竞争激烈的市场中脱颖而出,并吸引更多的观众和粉丝,需要一些科学而有效的技巧。本文将向你介绍10个让你的明星网红推广事半功倍的技巧。 技巧一:建立个人品牌 成功的明星网红通常都有独特而…...
k8s集群异常恢复
前提、我自己的k8s采用的是单master节点两个从节点部署,我针对单master情况进行恢复说明 场景一:正常开关虚拟机,可直接重启kubelet进行恢复 1、1、一般重启后三个节点都需要检查,输入命令检查kubelet: systemctl s…...
NOC总线(2)
1. NoC的路由 在NoC交换信息时,需要确定从源节点到目标节点所经过的路径,这时就需要路由算法来确定该路径。路由算法分为静态路由算法和动态路由算法两种。 静态路由算法对于两节点之间的路径是固定的,结构简单,便于硬件实…...
2401llvm,clang的libtooling
LibTooling(库工具) LibTooling是个支持基于Clang编写独立工具的库. 在此,为LLVM安装Clang工具 介绍 用LibTooling构建的工具(如Clang插件)通过代码运行FrontendActions. 这里演示运行Clang的快速检查一堆代码语法的SyntaxOnlyAction的不同方法. 解析内存中的代码片 如果想…...
数据结构—基础知识(13):树的存储结构
数据结构—基础知识(13):树的存储结构 双亲表示法 这种表示方法中,以一组连续的存储单元存储树的结点,每个结点除了数据域data外,还附设一个parent域用以指示其双亲结点的位置。 这种存储结构利用了每个结…...
【Python爬虫入门到精通】小白也能看懂的知识要点与学习路线
文章目录 1. 写在前面2. 爬虫行业情况3. 学习路线 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关…...
服务器数据恢复—EVA存储raid5硬盘离线的数据恢复案例
服务器数据恢复环境: 某品牌EVA某型号存储,底层是RAID5阵列,划分了若干lun。 服务器故障&分析: 该存储设备中raid5阵列有两块硬盘掉线,存储中的lun丢失。 将故障服务器存储中的所有磁盘编号后取出,硬件…...
MAMBA论文疑被拒收,计算机科学顶会评审遭质疑
2023 年底,卡内基梅隆和普林斯顿大学计算机系的两位年轻科学家(Albert Gu, Tri Dao)联合推出一种叫做“Mamba”的大语言模型(LLM)新构架。与Transformers等传统模型相比,Mamba能够更有效地处理长序列。它利…...
EHS管理系统为何需要物联网的加持?
EHS是Environment、Health、Safety的缩写,是从欧美企业引进的管理体系,在国外也被称为HSE。EHS是指健康、安全与环境一体化的管理。 而在国内,整个EHS市场一共被分成三类; 一类是EHS管培体系,由专门的EHS机构去为公司…...
记事本(父页面与iframe子页面的联通,vue3+ts展示fbx模型,与tga贴图)
vue3ts 展示fbx与tga贴图 npm i three --save <template><div ref"modelContainer"></div> </template><script setup lang"ts"> import { ref, onMounted } from vue; import * as THREE from three; import { FBXLoader…...
【好书推荐-第五期】《互联网大厂推荐算法实战》(异步图书出品)
😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…...
C++ Qt day2
自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height), 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <io…...
Mac上如何设置映射某个网站站点域名的IP
最近某常用的站点换 IP 了,但是 DNS 服务器还没有修改,这就导致无法访问(换 DNS 服务器也不行)。在用了一段时间的 IP 访问之后,还是没好,不知道是 DNS 污染还是咋了,所以最后还是手动改一下吧。…...
智能分析网关V4智慧冶金工厂视频智能监管方案
一、背景与需求 随着工业4.0的推进,冶金行业正面临着转型升级的压力。为了提高生产效率、降低能耗、保障安全,冶金智能工厂视频监管方案应运而生。该方案通过高清摄像头、智能分析技术、大数据处理等手段,对工厂进行全方位、实时监控…...
WebSocket实现HTML+SpringBoot聊天功能,小程序+SpringBoot聊天功能
目录 一、认识WebSocket 二、HTML实现聊天 三、微信小程序实现聊天 一、认识WebSocket 1.首先博主在初学Java时自我感觉走了很多弯路,因为以前见识短,在接触聊天功能时根本就没能想到有WebSocket这个聊天框架,就只能用底层的UDP或TCP实现聊…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...
