【大数据】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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口