【大数据】HADOOP-YARN容量调度器Spark作业实战

news2024/12/27 16:38:00

目录

      • 需求
      • 配置多队列的容量调度器
      • 验证队列资源

需求

default 队列占总内存的40%,最大资源容量占总资源的60%
ops 队列占总内存的60%,最大资源容量占总资源的80%

配置多队列的容量调度器

  1. 在yarn-site.xml里面配置使用容量调度器
<!-- 使用容量调度器 -->
<property>
    <name>yarn.resourcemanager.scheduler.class</name>   
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
  1. 在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的约束将不再有效。

  1. 同步到其他节点后,刷新配置
bin/yarn rmadmin -refreshQueues
  1. 查看界面展示
    在这里插入图片描述

验证队列资源

  1. 提交任务,查看队列资源占比情况
    提交任务
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

  1. 验证队列的最大资源限制
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个。

希望对正在查看文章的您有所帮助,记得关注、评论、收藏,谢谢您

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

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

相关文章

从 ELMo 到 ChatGPT:历数 NLP 近 5 年必看大模型

目录AI21 LabsAlibabaAllen Institute for AIAmazonAnthropicBAAIBaiduBigScienceCohereDeepMindEleutherAIGoogleHuggingfaceiFLYTEKMetaMicrosoftNVidiaOpenAISalesforceTsinghua UniversityUC BerkeleyYandex持续更新中 ...参考团队博客: CSDN AI小组 先上 “万恶之源”&…

物联网在智慧农业中的应用

随看现代科技的不断发展&#xff0c;近年来我国农业的进步是显而易见的。从八九十年代农业生产以人力为主&#xff0c;到之后的机械渐渐代替人力&#xff0c;再到如今物联网技术在农业领域的应用&#xff0c;多种前沿技术应用于农业物联网&#xff0c;对智慧农业生产的各个环节…

阿里云_山东鼎信短信的使用(云市场)

目录山东鼎信API工具类随机验证码工具类进行测试Pom依赖(可以先导入依赖)创建controllerSmsServiceSmsServiceImplswagger测试(也可以使用postman)山东鼎信API工具类 山东鼎信短信官网 找到java的Api&#xff0c;复制下来 适当改了一下&#xff0c;为了调用(类名SmsUtils) p…

GEE学习笔记 七十二:【GEE之Python版教程六】命令行简介

这篇开始就要讲解GEE相关的内容&#xff0c;首先聊一下命令行的内容&#xff0c;这个在官方文档中有详细的介绍&#xff0c;这里我简单说一下常用的几个命令&#xff0c;剩余的大家在使用过程中如果又需要可以随时查看相关官方文档的介绍。官方文档地址&#xff1a;https://dev…

pcie link training

有机会用瑞芯微做EP&#xff0c;X86做RC &#xff0c;调试两者建立连接。环境配置如图所示&#xff0c;两块单板&#xff0c;期望瑞芯微做EP&#xff0c;X86做RC&#xff0c;两者能够互联。LINK 配置过程主要配置瑞芯微瑞芯微的芯片配置&#xff0c;在配置EP模式时&#xff0c;…

5.2 BGP水平分割

5.2.2实验2&#xff1a;BGP水平分割 1. 实验目的 熟悉BGP水平分割的应用场景掌握BGP水平分割的配置方法 2. 实验拓扑 实验拓扑如图5-2所示&#xff1a; 图5-2&#xff1a;BGP水平分割 3. 实验步骤 &#xff08;1&#xff09;配置IP地址 R1的配置 <Huawei>…

GEE学习笔记 七十五:【GEE之Python版教程九】数值

这章介绍一下数值类型&#xff0c;数值在python中可以分为&#xff1a;整型、浮点型、复数等&#xff0c;在GEE中我们常用的就是整形和浮点型数据。 这段代码是在程序之前必须执行的&#xff0c;用来注册GEE。 import ee ee.Initialize() 1、数值的API 首先看一下GEE的pytho…

一文读懂select、poll、epoll的用法

select&#xff0c;poll&#xff0c;epoll都是IO多路复用的机制。I/O多路复用就通过一种机制&#xff0c;可以监视多个描述符&#xff0c;一旦某个描述符就绪&#xff08;一般是读就绪或者写就绪&#xff09;&#xff0c;能够通知程序进行相应的读写操作。但select&#xff0c;…

一些有用的shell命令盘点

1、ssh 说明&#xff1a; ssh命令是经常用来连接服务器的&#xff0c;如何使用ssh命令连接服务器是一个后端开发必备的技能&#xff0c;当你需要查看服务器上日志等信息时&#xff0c;就需要使用该命令来登录到服务器进行查看。 使用&#xff1a; ssh $USERNAME$IP例如&#…

Python程序打包exe可执行软件教程

1、前言Python虽好&#xff0c;但是平时我们写的代码都是.py脚本文件&#xff0c;必须要在Python环境下 才可以运行。如果一台电脑没有安装Python是无法运行我们的程序的。当然你也可以选择随身携带安装包。 不过终究是有些麻烦。那么有没有什么办法&#xff0c;能把我们编写的…

【扬尘监测系统】让扬尘管理迈向“智慧化”

扬尘是指道路与管线施工、物料运输、物料堆放、植物栽种和养护等活动产生的粉尘颗粒物对大气造成的污染。 治理扬尘污染&#xff0c;我们应该从源头出发&#xff0c;进行“防治”。扬尘监测系统是利用现代科学技术对扬尘的排放程度进行客观、科学、准确的量化和评价的设备&…

零信任-易安联零信任介绍(11)

​目录 ​易安联零信任公司介绍 易安联零信任发展路线 易安联零信任产品介绍 易安联零信任架构 易安联零信任解决方案 易安联零信任发展展望 易安联零信任公司介绍 易安联是一家专业从事网络信息安全产品研发与销售&#xff0c;是行业内领先的“零信任”解决方案提供商&…

ChatGPT或将引发新一轮失业潮?是真的吗?

最近&#xff0c;要说有什么热度不减的话题&#xff0c;那ChatGPT必然榜上有名。据悉是这是由美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;并协助人类…

6.2 构建 RESTful 应用接口

第6章 构建 RESTful 服务 6.1 RESTful 简介 6.2 构建 RESTful 应用接口 6.3 使用 Swagger 生成 Web API 文档 6.4 实战&#xff1a;实现 Web API 版本控制 6.2 构建 RESTful 应用接口 6.2.1 Spring Boot 对 RESTful 的支持 Spring Boot 提供的spring-boot-starter-web组件完全…

Pygame中画圆

在Pygame中&#xff0c;可以通过draw模块下的circle()函数来进行画圆。1 准备工作的完成在画圆之前需要导入Pygame模块、初始化Pygame模块以及创建Surface对象。import pygame from pygame.locals import * pygame.init() screen pygame.display.set_mode((600,500))其中&…

SpringBoot实现 内置 定时 发送邮件功能

前段时间因为公司用了定时任务&#xff0c;所以写了2篇定时任务的文章&#xff0c;一篇是正常如何在Springboot 编程中如何去使用quartz &#xff0c;第二篇就是 正常业务性的增删改查&#xff0c;今天我们来看下如何使用 quartz 去定时给女朋友发邮件 &#xff0c;结尾会放上完…

智能电子办公标牌解决方案

一、WiFi智能电子标牌 智能电子办公标牌将它放在任何地方&#xff0c;以可视化会议日程、约会信息、行动计划和协作任务&#xff0c;使团队能够更有效地工作并更好地利用空间。 优势&#xff1a; ● 超低功耗&#xff0c;充一次电管用一年&#xff0c;支持Type-C接口充电 ●…

Linux之进程

一.冯诺依曼体系 在计算机中&#xff0c;CPU&#xff08;中央处理器&#xff09;是不直接跟外部设备直接进行通信的&#xff0c;因为CPU处理速度太快了&#xff0c;而设备的数据读取和输入有太慢&#xff0c;而是CPU以及外设直接跟存储器&#xff08;内存&#xff09;打交道&am…

Python 之 Matplotlib 柱状图(竖直柱状图和水平柱状图)、直方图和饼状图

文章目录一、柱状图二、竖直柱状图1. 基本的柱状图2. 同位置多柱状图3. 堆叠柱状图三、水平柱状图1. 基本的柱状图2. 同位置多柱状图3. 堆叠柱状图四、直方图 plt.hist()1. 返回值2. 添加折线直方图3. 不等距分组4. 多类型直方图5. 堆叠直方图五、饼状图 pie()1. 百分比显示 pe…

初步使用MSYS2

在此镜像站点下载&#xff0c; https://mirror.tuna.tsinghua.edu.cn/help/msys2/ 根据资料&#xff0c; MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX …