一、概述
每个job提交到yarn上执行时,都会分配Container容器去运行,而这个容器需要资源才能运行,这个资源就是Cpu和内存。
1、CPU资源调度
目前的CPU被Yarn划分为虚拟CPU,这是yarn自己引入的概念,因为每个服务器的Cpu计算能力不一样,有的机器可能是 其他机器的计算能力的2倍,然后可以通过多配置几个虚拟内存弥补差异。在yarn中,cpu的相关配置如下。
yarn.nodemanager.resource.cpu-vcores
表示该节点服务器上yarn可以使用的虚拟的CPU个数,默认是8,推荐配置与核心个数相同,如果节点CPU的核心个数不足8个,需要调小这个值,yarn不会智能的去检测物理核数。如果机器性能较好,可以配置为物理核数的2倍。
yarn.scheduler.minimum-allocation-vcores
表示单个任务最小可以申请的虚拟核心数,默认为1
yarn.sheduler.maximum-allocation-vcores
表示单个任务最大可以申请的虚拟核数,默认为4;如果申请资源时,超过这个配置,会抛出 InvalidResourceRequestException
2、Memory资源调度
yarn一般允许用户配置每个节点上可用的物理资源,可用指的是将机器上内存减去hdfs的,hbase的等等剩下的可用的内存。
yarn.nodemanager.resource.memory-mb
设置该节点上yarn可使用的内存,默认为8G,如果节点内存不足8G,要减少这个值,yarn不会智能的去检测内存资源,一般这个值式yarn的可用内存资源。
yarn.scheduler.minmum-allocation-mb
单个任务最小申请物理内存量,默认是1024M,根据自己业务设定
yarn.scheduler.maximum-allocation-mb
单个任务最大可以申请的物理内存量,默认为8291M
二、如果设置这几个参数
如果一个服务器是32核,虚拟后为64核,128G内存,我们该如何设置上面的6个参数呢?即如何做到资源最大化利用
生产上我们一般要预留15-20%的内存,那么可用内存就是128*0.8=102.4G,去除其他组件的使用,我们设置成90G就可以了。
1、yarn.sheduler.maximum-allocation-vcores
一般就设置成4个,cloudera公司做过性能测试,如果CPU大于等于5之后,CPU的利用率反而不是很好。这个参数可以根据生成服务器决定,比如公司服务器很富裕,那就直接设置成1:1;设置成32,如果不是很富裕,可以直接设置成1:2。我们以1:2来计算。
2、yarn.scheduler.minimum-allocation-vcores
如果设置vcoure = 1,那么最大可以跑64/1=64个container,如果设置成这样,最小container是64/4=16个。
3、yarn.scheduler.minmum-allocation-mb
如果设置成2G,那么90/2=45最多可以跑45个container,如果设置成4G,那么最多可以跑24个;vcore有些浪费。
4、yarn.scheduler.maximum-allocation-mb
这个要根据自己公司的业务设定,如果有大任务,需要5-6G内存,那就设置为8G,那么最大可以跑11个container。
三、任务调度调优
FairScheduler—公平调度
根据我的经验及理解,相对于CapacityScheduler调度器,FairScheduler在配置过程上更加简单,但资源调度上就相对粗暴一些;
CapacityScheduler—容器调度
该调度器在资源调度上更加精细,但配置过程相对复杂一些。
由于两种调度器实现的功能并无太大差异,对于生产系统来讲,两种调度器均可使用,笔者本次主要针对FairScheduler调度器进行实践及探究。
实践探究
FairScheduler支持Fair(公平排序算法)和Fifo(先进先出)两种调度模式,来实现各个租户和任务之间资源的调度,然而如何行之有效的结合Fair和Fifo两种模式来平衡任务差异性与资源利用最大化之间的关系,是多租户平台需要探究的问题,经过长期的生产实践及相关测试,笔者得出如下结论:
模式设置:队列之间使用Fifo(先进先出)模式,队列内部任务之间使用Fifo(先进先出)模式
实践结论:这种组合模式下,队列内部先提交的任务可获得充足的资源以最快速度完成,但在空闲资源较少的情况时,后提交任务的队列需要等待前面队列中任务释放资源后才可启动,若前面队列任务执行较慢,则会大大增加后续队列所有任务的等待时间,从而增加后续队列所有任务的延迟时间;
模式设置:队列之间使用Fifo(先进先出)模式,队列内部任务之间使用Fair(公平排序)模式
实践结论:这种模式与第一种模式存在同样的问题,后续队列中的任务在资源较为紧张的情况下延时过大。
模式设置:队列之间使用Fair(公平排序)模式,队列内部任务之间使用Fifo(先进先出)模式
实践结论:这种模式下,无论各个队列提交任务的次序如何,均可在抢占时间到达时,获得配置的最小资源量供队列内任务运行,而队列内部的Fifo模式也可保证先提交的任务获得充足的资源,以最快速度完成,且整体资源利用率较高。
模式设置:队列之间使用Fair(公平排序)模式,队列内部任务之间使用Fair(公平排序)模式
实践结论:这种模式与第三种类似,可以保证每个队列提交的任务都可以获取资源,但队列内部任务之间的Fair模式,使得任务之间公平的获取资源,如果出现队列内同一时间段提交大量任务的情况,则这些任务各自获取的资源量就很小,也就意味着队列内所有任务执行速度都非常缓慢,即所有任务都会出现较大延时。
综上所述,在任务差异性较大的多租户平台中,较为合理的调度模式为上述第三种:在队列间使用Fair(公平排序)模式,队列内部的任务间使用Fifo(先进先出)模式。
=========================
四、篇外—小米的yarn调度
本篇文章将浅析 YARN 调度器以及在小米的探索与实践
什么是YARN?
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。也就是说 YARN 在 Hadoop 集群中充当资源管理和任务调度的框架。
YARN 基本结构:(图片来自 Apache Yarn 官网)

负责资源管理和调度的组件:全局的资源管理器 ResourceManager(RM)和每个应用程序的 ApplicationMaster(AM)。应用程序可以是单个作业,也可以是 DAG 作业。ResourceManager 和 NodeManager 组成数据计算框架。
ResourceManager 负责集群资源的统一管理和调度;
NodeManager 负责单节点资源管理和使用,处理来自 ResourceManager/ApplicationMaster 的命令;
ApplicationMaster 负
YARN资源调度与优化

本文深入探讨YARN资源调度原理,包括CPU和内存资源的分配策略,以及FairScheduler和CapacityScheduler的特性与配置。通过实践案例,分享了在多租户环境下如何平衡资源利用与任务调度,特别介绍了小米的YARN调度实践。
最低0.47元/天 解锁文章
626

被折叠的 条评论
为什么被折叠?



