【大数据】YARN调度器及调度策略

2024-01-24 18:04
文章标签 数据 策略 器及 调度 yarn

本文主要是介绍【大数据】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 先进先出调度器的特点

  1. 无需任何配置,作业按照先来后到分配资源,但会出现小任务被大任务阻塞的情况。

2.容量调度器

Yahoo开发的多用户调度器,容量调度器每个队列内部先进先出,同一时间队列中只有一个任务在执行,队列的并行度为队列的个数。

2.1 容量调度器特点

  1. 多队列:每隔队列可以配置一定的资源量,每个队列内部采用先进先出的调度策略。

  2. 容量保证:管理员可为每个队列设置资源最低保证和资源使用上限。

  3. 资源灵活:如果一个队列中的资源有剩余,可以暂时共享给哪些需要资源的队列,而一旦该队列有新的作业提交,则其他队列借调的资源会归还给该队列。

  4. 多租户:支持多用户共享集群和多作业同时运行;为了防止一个用户的作业独占队列中的资源,可以对用户提交作业所使用的资源进行限定。

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 公平调度器的特点

  1. 多队列:每隔队列可配置一定的资源,每个队列内部采用先进先出的调度策略。

  2. 容量保证:管理员可为每个队列设置资源最低保证和资源使用上限。

  3. 资源灵活:如果一个队列中的资源有剩余,可以暂时共享给哪些需要资源的队列,而一旦该队列有新的作业提交,则其他队列借调的资源会归还给该队列。

  4. 多租户:支持多用户共享集群和多作业同时运行;为了防止一个用户的作业独占队列中的资源,可以对用户提交作业所使用的资源进行限定。

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 核心调度策略不同

  1. 容量调度器优先选择资源利用率低的队列;

  2. 公平调度器优先选择对资源缺额比例大的队列。

4.2 每个队列可设置的调度策略不同

  1. 容量调度器:FIFO、DRF(内存+CPU);

  2. 公平调度器: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调度器及调度策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640531

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X