【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.mzph.cn/news/135145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis实战 | 使用Redis 的有序集合(Sorted Set)实现排行榜功能,和Spring Boot集成

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

[架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法

目录 前言&#xff1a; 一、概述: 软件聚合的程度由简单到复杂 二、主要开发方法详见 2.1 结构化的开发方法 2.2 面对对象的开发方法 2.3 面向服务的开发方法 2.4 面向组件的开发方法 三、不同开发方法比较 3.1 结构化开发方法 3.2 面向对象(OOP)开发方法 3.3 面向服…

【计算机网络】网络层IP协议

文章目录 1. IP协议介绍2. IP报头3. IP的分片和组装4. IP地址网段划分特殊的IP地址子网、局域网、网段的区别IP地址的数量限制 5. 公网IP和私有IP6. NAT技术7. 路由Route 1. IP协议介绍 IP协议&#xff08;Internet Protocol&#xff09;是一种最常用的网络层协议&#xff0c;…

CSS 边框、轮廓线

一、CSS边框&#xff1a; CSS边框属性允许指定一个元素边框的样式和颜色。 1&#xff09;、边框样式&#xff1a;border-style属性用来定义边框的样式&#xff0c;border-style值&#xff1a; 2&#xff09;、边框宽度&#xff1a;border-width属性用于指定边框宽度。指定变宽…

2023-11-07 C语言链接库编译命令

点击 <C 语言编程核心突破> 快速C语言入门 C语言链接库编译命令 前言一、引入库文件, 包括头文件和lib库二、简单示例总结 前言 要解决问题: 一般没有给新手的链接库编译命令学习资料, 然而, 不解决这个问题, 调用库就能折腾到劝退, 我近日回答一个问题, 很简单, 调用…

【 Docker: 数据卷挂载】

背景 Docker只提供了容器运行的必备依赖&#xff0c;但是一些编辑等操作的依赖是不支持的&#xff0c;如vi操作容器内部文件、将静态资源拷贝到容器内来等。 docker pull nginx docker run -d -p 81:80 --namemynginx -v D:/docker/nginx/www:/usr/share/nginx/www -v D:/dock…

柯桥英语培训,商务英语学习,常用口语

欢迎各位小伙伴来到 ——“每个单词我都认识&#xff0c;但我又不认识整个短语”的时候啦&#xff01; “dog”是“狗” “breakfast”是早餐 那“a dogs breakfast”是“狗的早餐”&#xff1f; 狗听了都摇头。 a dogs breakfast是一句英文俚语&#xff0c;指的是无序、混…

LeetCode | 面试题 02.02. 返回倒数第 k 个节点

LeetCode | 面试题 02.02. 返回倒数第 k 个节点 OJ链接 思路&#xff1a;定义两个快慢指针&#xff0c;让快指针先提前走k个节点&#xff0c;然后再让慢结点和快结点一起走&#xff0c;当快指针 NULL时&#xff0c;慢指针就是倒数第k个节点 代码如下&#xff1a; int kthT…

计算机毕业设计java+springboot+vue的旅游攻略平台

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用JAVA语言&#xff0c;结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、用户管理、攻略管理、审核信息管理、积分…

STM32Cube +VSCode开发环境搭建

STM32Cube VSCode开发环境搭建 0.前言一、各种方式对比1.STM32CubeMX CLion2.STM32CubeIDE VSCode STM32 VSCode Extension3.VSCode EIDE插件 二、STM32CubeIDE VSCode STM32 VSCode Extension环境搭建1.需要安装的软件2.相关配置3.编译测试 三、总结 0.前言 工欲善其事&…

最新Next14 路由处理器 Route Handlers

四、使用Next路由处理程序 Next.js Route Handlers I. Next中路由处理程序是什么 ​ 路由处理程序是在用户访问站点路由时执行的功能。它们负责处理对定义的URL或路由的传入HTTP请求&#xff0c;以生成所需的数据。从本质上讲&#xff0c;当用户访问Next.js应用程序中的特定页…

chatglm3-6b部署及微调

chatglm3-6b部署及微调 modelscope: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/filesgithub: https://github.com/THUDM/ChatGLM3镜像: ubuntu20.04-cuda11.8.0-py38-torch2.0.1-tf2.13.0-1.9.4v100 16G现存 单卡 安装 软件依赖 pip install --upgrade pippip ins…

使用IDEA让文本对比不在变的困难

文章目录 前言操作1、IDEA与电脑磁盘任意文件的比较2、项目内部的文件比较3、剪切板比较4、IDEA本地历史比较5、IDEA版本历史对比 前言 在日常实际开发当中我们常常会对一些代码或内容进行比对查看是否有差异&#xff0c;这个时候不需要借用第三方比对插件&#xff0c;在IDEA中…

git笔记

git常见命令 git init :初始化本地仓库&#xff0c;会生成一个.git文件&#xff0c;该文件用于管理和追踪该本地仓库&#xff0c;只有在git仓库下的文件才能被管理! git config user. name "用户名” git config user. email " 邮箱” git config -1 :列出当前git仓库…

老李测评:网络电视盒子哪个好?双十一必看电视盒子推荐

大家好&#xff0c;我是测评人老李&#xff0c;双十一大促期间我们都在买买买&#xff0c;本期老李要分享的数码产品推荐是电视盒子&#xff0c;为了推荐更客观&#xff0c;老李购入了各平台热销的十几款电视盒子&#xff0c;通过两周的对比后&#xff0c;整理了这份电视盒子推…

class类默认导出,header字段在请求中的位置

这是封装好的&#xff0c;没封装的如下 如果没有用uni.post那么就是如下的结构 let header {Content-Type: application/x-www-form-urlencoded,tenant: MDAwMA, } request({url:/sal/formula/validFormula,method:post,data:{},header })

音乐免费下载mp3格式+音频格式转换+剪辑音频+合并音频教程

1.在qq音乐网页版搜索想要的歌曲 qq音乐网站&#xff1a;https://y.qq.com/ 如果你是vip可以直接下载vip的歌曲&#xff0c;如果不是选择不是vip的歌曲进行第一步的操作 2.点击播放进入页面后F12拿到音频地址 然后双击src里面的音频地址复制 网页新标签打开赋值的这个链接&a…

Gitlab服务器配置LDAP指导

ssh登录gitlab服务器&#xff1a;192.168.1.203修改配置文件 sudo su vim /etc/gitlab/gitlab.rb找到ldap_enabled和ldap_servers关键字并修改参数 保存配置文件并重新载入配置 gitlab-ctl reconfigure检查ldap相关配置是否成功&#xff08;列出前100个用户&#xff0c;若没…

BIM、建筑机器人、隧道工程施工关键技术

一、BIM简介 &#xff08;一&#xff09;BIM概念 BIM&#xff08;Building Information Modeling&#xff09;&#xff0c;建筑信息模型。该技术通过数字化手段&#xff0c;在计算机中建立虚拟建筑&#xff0c;该虚拟建筑提供从单一到完整、包含逻辑关系的建筑信息库。信息库…

基于全阶模型磁链观测器的异步电机矢量控制的学习

导读&#xff1a;异步电机直接矢量控制需要通过磁链观测器来获取同步角&#xff0c;用于控制过程中的坐标变换。同时&#xff0c;磁链观测器输出的估计磁链用于磁链PI调节器闭环控制。所以磁链观测器在矢量控制中显得尤为重要。 如果需要文章中对应的仿真模型&#xff0c;关注…