【大数据】HADOOP-YARN容量调度器Spark作业实战
目录
- 需求
- 配置多队列的容量调度器
- 验证队列资源
需求
default 队列占总内存的40%,最大资源容量占总资源的60%
ops 队列占总内存的60%,最大资源容量占总资源的80%
配置多队列的容量调度器
- 在yarn-site.xml里面配置使用容量调度器
<!-- 使用容量调度器 -->
<property><name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
- 在capacity-scheduler.xml中配置如下:
从Apache hadoop 3.1.0开始 CapacityScheduler支持配置绝对值格式的资源量。上面的 yarn.scheduler.capacity..capacity 和 yarn.scheduler.capacity..max-capacity 配置项,可以指定一个绝对资源量如 [memory=10240,vcores=12]。这表示为队列配置10GB的内存和12个Vcore。使用绝对值资源配置时,这2个参数分别对应Yarn web页面中队列信息的__Configured Capacity__和__Configured Max Capacity__
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 表示集群最大app数 --><property><name>yarn.scheduler.capacity.maximum-applications</name><value>10000</value></property><!-- 表示集群上某队列可使用的资源比例 目的是为了限制过多的am数,即app数 --><property><name>yarn.scheduler.capacity.maximum-am-resource-percent</name><value>0.1</value></property><!-- 配置指定调度器使用的资源计算器 --><!-- DefaultResourseCalculator 默认值,只使用内存进行比较 --><!-- DominantResourceCalculator 多维度资源计算,内存、cpu --><property><name>yarn.scheduler.capacity.resource-calculator</name><value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value></property><!-- root队列中有哪些子队列--><property><name>yarn.scheduler.capacity.root.queues</name><value>default,ops</value></property><!-- *******************default队列*********************** --><!-- default 队列占用的资源容量百分比 40% --><property><name>yarn.scheduler.capacity.root.default.capacity</name><value>40</value></property><!-- default 队列占用的最大资源容量百分比 60%--><property><name>yarn.scheduler.capacity.root.default.maximum-capacity</name><value>60</value></property><!-- 允许单个用户最多可获取的队列资源的倍数,默认值1,确保单个用户无论集群有多空闲,永远不会占用超过队列配置的资源当值大于1时,用户可使用的资源将超过队列配置的资源,但应该不能超过队列配置的最大资源--><property><name>yarn.scheduler.capacity.root.default.user-limit-factor</name><value>1</value></property><!-- 队列状态 --><property><name>yarn.scheduler.capacity.root.default.state</name><value>RUNNING</value></property><!-- 限定哪些admin用户可向root队列中提交应用程序 --><property><name>yarn.scheduler.capacity.root.default.acl_submit_applications</name><value>*</value></property><!-- 为root队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 --><property><name>yarn.scheduler.capacity.root.default.acl_administer_queue</name><value>*</value></property><!-- 配置哪些用户有权配置提交任务优先级 --><property><name>yarn.scheduler.capacity.root.default.acl_application_max_priority</name><value>*</value></property><!-- 任务的超时时间设置:yarn application -appId ${appId} -updateLifeTime Timeout --><!-- 如果application指定了超时时间,则提交到该队列的application能够制定的最大超时时间不能超过该值。--><property><name>yarn.scheduler.capacity.root.default.maximum-application-lifetime</name><value>-1</value></property><!-- 如果application没有指定超时时间,则用default-application-lifetime 作为默认值 --><property><name>yarn.scheduler.capacity.root.default.default-application-lifetime</name><value>-1</value></property><!-- *******************hive队列*********************** --><!-- hive 队列占用的资源容量百分比 60% --><property><name>yarn.scheduler.capacity.root.ops.capacity</name><value>60</value></property><!-- default 队列占用的最大资源容量百分比 80%--><property><name>yarn.scheduler.capacity.root.ops.maximum-capacity</name><value>80</value></property><!-- 允许单个用户最多可获取的队列资源的倍数,默认值1,确保单个用户无论集群有多空闲,永远不会占用超过队列配置的资源当值大于1时,用户可使用的资源将超过队列配置的资源,但应该不能超过队列配置的最大资源--><property><name>yarn.scheduler.capacity.root.ops.user-limit-factor</name><value>1</value></property><!-- 队列状态 --><property><name>yarn.scheduler.capacity.root.ops.state</name><value>RUNNING</value></property><!-- 限定哪些admin用户可向root队列中提交应用程序 --><property><name>yarn.scheduler.capacity.root.ops.acl_submit_applications</name><value>*</value></property><!-- 为root队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 --><property><name>yarn.scheduler.capacity.root.ops.acl_administer_queue</name><value>*</value></property><!-- 配置哪些用户有权配置提交任务优先级 --><property><name>yarn.scheduler.capacity.root.ops.acl_application_max_priority</name><value>*</value></property><!-- 任务的超时时间设置:yarn application -appId ${appId} -updateLifeTime Timeout --><!-- 如果application指定了超时时间,则提交到该队列的application能够制定的最大超时时间不能超过该值。--><property><name>yarn.scheduler.capacity.root.ops.maximum-application-lifetime</name><value>-1</value></property><!-- 如果application没有指定超时时间,则用default-application-lifetime 作为默认值 --><property><name>yarn.scheduler.capacity.root.opsdefault-application-lifetime</name><value>-1</value></property><!--CapacityScheduler尝试调度机本地容器之后错过的调度机会数。通常,应该将其设置为集群中的节点数。默认情况下在一个架构中设置大约40个节点。应为正整数值。--><property><name>yarn.scheduler.capacity.node-locality-delay</name><value>40</value></property><!--在节点本地延迟时间之外的另外的错过的调度机会的次数,在此之后,CapacityScheduler尝试调度非切换容器而不是机架本地容器.例如:在node-locality-delay = 40和rack-locality-delay = 20的情况下,调度器将在40次错过机会之后尝试机架本地分配,在40 + 20 = 60之后错过机会.使用-1作为默认值,禁用此功能.在这种情况下,根据资源请求中指定的容器和唯一位置的数量以及集群的大小,计算分配关闭交换容器的错失机会的数量--><property><name>yarn.scheduler.capacity.rack-locality-additional-delay</name><value>-1</value></property><!-- 此配置指定用户或组到特定队列的映射 --><property><name>yarn.scheduler.capacity.queue-mappings</name><value>u:root:default,g:root:default,u:%user:%user</value></property><property><name>yarn.scheduler.capacity.queue-mappings-override.enable</name><value>false</value></property><property><name>yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments</name><value>1</value></property><property><name>yarn.scheduler.capacity.application.fail-fast</name><value>false</value></property><property><name>yarn.scheduler.capacity.workflow-priority-mappings</name><value></value></property><property><name>yarn.scheduler.capacity.workflow-priority-mappings-override.enable</name><value>false</value></property>
</configuration>
其中的容量也可以采用绝对值来配置
<property><name>yarn.scheduler.capacity.root.default.capacity</name><value>[memory=9830,vcores=9]</value></property><property><name>yarn.scheduler.capacity.root.default.maximum-capacity</name><value>[memory=14745,vcores=14]</value></property><property><name>yarn.scheduler.capacity.root.ops.capacity</name><value>[memory=14745,vcores=14]</value></property><property><name>yarn.scheduler.capacity.root.ops.maximum-capacity</name><value>[memory=19660,vcores=19]</value></property>
不同的队列同时可以使用不同的资源配置格式,也就是说有些队列可以使用百分比格式,有些可以使用绝对值格式,而且实际使用时发现在这种混合配置中,各层级上所有队列的百分比之和必须等于100的约束将不再有效。
- 同步到其他节点后,刷新配置
bin/yarn rmadmin -refreshQueues
- 查看界面展示
验证队列资源
- 提交任务,查看队列资源占比情况
提交任务
bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 2g --executor-memory 2g --executor-cores 1 --num-executors 1 --queue default examples/jars/spark-examples_2.12-3.2.1.jar 100
–driver-memory 2g --executor-memory 2g --executor-cores 1 --num-executors 1
可以看到 向YARN的资源需求是:
amMemory = 2048
amMemoryOverhead = 384
executorMemory = 2048
executorOffHeapMemory. = 0
executorMemoryOverhead = 384
amCores = 1
最终向YARN上申请AM的资源大小为:
am = amMemory + amMemoryOverhead = 2432
executor = executorMemory + executorMemoryOverhead = 2432
capability = <memory:2432,vCores:1>
由于配置的集群资源分配最小单位为1024MB, 因此需要向上取整, 即 3072 MB
这也是为甚么我明明申请的 资源 比较小,但是在yarn上显示的资源总不对,比实际申请的资源要高一些。资源比预期的要高。
这主要是yarn的资源计算是用DominantResourceCalculator来计算管理 cpu、内存的。
spark和yarn上申请的资源没有对的上。
所以最终的资源:
Driver 申请的资源 --driver-memory 2g 实际在yarn中AM申请的资源为 3g1c
Executor 申请的资源 --executor-memory 2g --executor-cores 1 --num-executors 1 实际在yarn中executor申请的资源为 3g1c
最终总的资源为 6g2c
同理再提交一下 1g1c的
bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --executor-cores 1 --num-executors 2 --queue default examples/jars/spark-examples_2.12-3.2.1.jar 100
–driver-memory 1g --executor-memory 1g --executor-cores 1 --num-executors 2
所以最终的资源:
Driver 申请的资源 --driver-memory 1g 实际在yarn中AM申请的资源为 1g1c
Executor 申请的资源 --executor-memory 1g --executor-cores 1 --num-executors 2 实际在yarn中executor申请的资源为 4g2c
最终总的资源为 6g3c
- 验证队列的最大资源限制
bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 2g --executor-memory 2g --executor-cores 2 --num-executors 5 --queue default examples/jars/spark-examples_2.12-3.2.1.jar 100
当内存需求超过队列最大资源时
bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 2g --executor-memory 2g --executor-cores 2 --num-executors 6 --queue default examples/jars/spark-examples_2.12-3.2.1.jar 100
最终看到申请的资源可以超过队列配置的资源,但是不会超过最大的资源
spark申请的容器为 6 个,但是最终只启动了4个。
希望对正在查看文章的您有所帮助,记得关注、评论、收藏,谢谢您
相关文章:

【大数据】HADOOP-YARN容量调度器Spark作业实战
目录需求配置多队列的容量调度器验证队列资源需求 default 队列占总内存的40%,最大资源容量占总资源的60% ops 队列占总内存的60%,最大资源容量占总资源的80% 配置多队列的容量调度器 在yarn-site.xml里面配置使用容量调度器 <!-- 使用容量调度器…...
平面及其方程
一、曲面和交线的定义 空间解析几何中,任何曲面或曲线都看作点的几何轨迹。在这样的意义下,如果曲面SSS与三元方程: F(x,y,z)0(1)F(x,y,z)0\tag{1} F(x,y,z)0(1) 有下述关系: 曲面 SSS 上任一点的坐标都满足方程(1)(1)(1)不在曲…...
7 配置的封装
概述 IPC设备通常有三种配置信息:一是默认配置,存储了设备所有配置项的默认值,默认配置是只读的,不能修改;二是用户配置,存储了用户修改过的所有配置项;三是私有配置,存储了程序内部使用的一些配置项,比如:固件升级的URL、固件升级标志位等。恢复出厂设置的操作,实际…...
03_Docker 入门
03_Docker 入门 文章目录03_Docker 入门3.1 确保 Docker 已经就绪3.2 运行我们的第一个容器3.3 使用第一个容器3.4 容器命名3.5 重新启动已经停止的容器3.6 附着到容器上3.7 创建守护式容器3.8 容器内部都在干些什么3.9 Docker 日志驱动3.10 查看容器内的进程3.11 Docker 统计信…...
Python 为什么要 if __name__ == “__main__“:
各位读者,你们知道以下两个Python文件有什么区别吗? main1.py def main():output Helloprint(output)if __name__ "__main__":main()main2.py output Hello print(output)当我们直接运行 main1.py 与 main2.py 的时候,程序都…...

455. 分发饼干、376. 摆动序列、53. 最大子数组和
455.分发饼干 题目描述: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块…...

基于Springbot+微信小程序的购药平台的设计与实现
基于Springbot微信小程序的购药平台的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、…...

aws lambda rust的sdk和自定义运行时
rust的aws sdk 参考资料 https://docs.aws.amazon.com/sdk-for-rust/latest/dg/getting-started.htmlhttps://awslabs.github.io/aws-sdk-rust/https://github.com/awslabs/aws-sdk-rusthttps://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rust_dev_preview rus sd…...

[安装之3] 笔记本加装固态和内存条教程(超详细)
由于笔记本是几年前买的了,当时是4000,现在用起来感到卡顿,启动、运行速度特别慢,就决定换个固态硬盘,加个内存条,再给笔记本续命几年。先说一下加固态硬盘SSD的好处:1.启动快 2.读取延迟小 3.写…...

极客时间左耳听风-高效学习
左耳听风——高效学习篇 P95 | 高效学习:端正学习态度 本人真实⬇️⬇️⬇️⬇️ “ 大部分人都认为自己爱学习,但是: 他们都是只有意识没有行动,他们是动力不足的人。 他们都不知道自己该学什么,他们缺乏方向和目标。…...

MSR寄存器访问
1.介绍 MSR是CPU的一组64位寄存器,每个MSR都有它的地址值(如下图所示),可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作。 如图中为8个P-state寄存器,地址分别为0xC001 0064 ~ 0xC001 006B,每个寄存…...

ArcGIS:模型构建器实现批量按掩膜提取影像
用研究区域的矢量数据来裁剪栅格数据集时,一般我们使用ArcGIS中的【按掩膜提取工具】。如果需要裁剪的栅格数据太多,处理起来非常的麻烦,虽然ArcGIS中有批处理的功能,但是还是需要手动选择输入输出数据。 如下图,鼠标…...
算法刷题打卡第94天: 找出给定方程的正整数解
找出给定方程的正整数解 难度:中等 给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子未知,但它是单调…...

浅析SAS协议(1):基本介绍
文章目录概述SAS协议发展历程SAS技术特性SAS设备拓扑SAS phySAS地址SAS设备类型SAS协议分层参考链接概述 SAS,全称Serial Attached SCSI,即串行连结SCSI,是一种采用了串行总线的高速互连技术。通过物理上使用串行总线连结,在链路…...

93.【Vue-细刷-02】
Vue-02(十六)、基本列表渲染 (v-for)1.使用v-for遍历数组2.使用v-for遍历对象3.使用v-for遍历字符串(十七)、列表过滤 (filter())1.⭐JS中Change属性的原生状态⭐2.使用watch监听实现3.const {xxx} this 在Vue的作用⭐⭐4.JS箭头函数参数的简写⭐5.使用computed进行计算实现(最…...

Allegro负片层不显示反盘的原因和解决办法
Allegro负片层不显示反盘的原因和解决办法 在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图 L2层是负片层 L2层仍然只能看到盘 如何才能看到反盘显示的效果,具体操作如下 首先确定L2层层叠里面设置的是负片...
ACM数论 裴蜀定理(贝祖定理)
一.内容定义 「裴蜀定理」,又称贝祖定理(Bzouts lemma)。是一个关于最大公约数的定理。其内容定义为:对于不全为零的任意整数 a 和 b,记二者的最大公约数为 g 即 gcd(a,b) g,则对于任意整数 x 和 y 都一定…...
基础篇—CSS Position(定位)解析
CSS Position(定位) position 属性指定了元素的定位类型。 position 属性的五个值: relativefixedabsolutesticky元素可以使用的顶部,底部,左侧和右侧属性定位。然而,这些属性无法工作,除非是先设定position属性。他们也有不同的工作方式,这取决于定位方法。 1、static…...
正则表达式与grep
基本正则表达式BRE集合 匹配字符匹配次数位置锚定 符号作用^尖角号,用于模式的最正常,如“^haha”,匹配以haha单词开头的行$美元符,用于模式的最右侧,如“haha$”,表示haha单词结尾的行^$组合符ÿ…...

开发必备的IDEA 插件!效率提升 50 倍!
日常开发中,面向百度编程的程序员,很多时候,你跟大佬级别的差距,可能不仅仅是知识面的差距,还有就是开发效率的差距。以下是我常用的几个IDEA插件,废话不多说,直接肝干货! 1. Codot…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...

路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...

在Zenodo下载文件 用到googlecolab googledrive
方法:Figshare/Zenodo上的数据/文件下载不下来?尝试利用Google Colab :https://zhuanlan.zhihu.com/p/1898503078782674027 参考: 通过Colab&谷歌云下载Figshare数据,超级实用!!࿰…...
在Spring Boot中集成RabbitMQ的完整指南
前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...