Yarn调优&Yarn调度器

Yarn调优

假设内存128G 16物理core

装完CentOS,消耗内存1G
系统预览15%-20%内存(包含1.1),以防全部使用导致系统夯住 和 oom机制事件,或者给未来部署组件预览点空间(128*20%=25.6G==26G)
假设只有DN NM节点,余下内存: 128-26=102G
给DN进程(自身)2G,给NM进程(自身)4G,剩余102-2-4=96G

container(容器)内存的分配
yarn.nodemanager.resource.memory-mb 96G
yarn.scheduler.minimum-allocation-mb 1G 极限情况下,只有96个container 内存1G
yarn.scheduler.maximum-allocation-mb 96G 极限情况下,只有1个container 内存96G

container的内存会自动增加,默认1g递增
container:1-96个

container虚拟核
物理核:虚拟核 =1:2 32vcore
默认1:2 一般不修改
yarn.nodemanager.resource.pcores-vcores-multiplier 2

container物理核分配 (物理核:虚拟核 =1:2 ==>16:32)
yarn.nodemanager.resource.cpu-vcores 32个
yarn.scheduler.minimum-allocation-vcores 1个 极限情况下,只有32个container
yarn.scheduler.maximum-allocation-vcores 32个 极限情况下,只有1个container

container的物理核会自动增加,默认1个递增,那么container的个数的范围: :1-32个

关键: cloudera公司推荐,一个container的vcore最好不要超过5,那么我们设置4
yarn.scheduler.maximum-allocation-vcores 4 极限情况下,只有8个container

综合memory+vcore的分配
一共有32个vcore,一个container的vcore是4个,那么分配container一共有8个

重新分配物理核
yarn.nodemanager.resource.cpu-vcores 32个
yarn.scheduler.minimum-allocation-vcores 1个
yarn.scheduler.maximum-allocation-vcores 4个 极限container 8个

根据物理核重新分配内存
yarn.nodemanager.resource.memory-mb 96G
yarn.scheduler.minimum-allocation-mb 1G
yarn.scheduler.maximum-allocation-mb 12G 极限container 8个

分配后的每个container的物理核数是4个,内存大小是12G,当然当spark计算时内存不够大,这个参数肯定要调大,那么这种理想化的设置个数必然要打破,以memory为主


假如 256G内存 56core,请问参数如何设置

首先减去系统内存开销和其他进程开销,

系统开销: 256*0.2=52G

DN开销: 2G

NM开销: 4G

Hbase开销: 暂无

剩余内存容量: 256-52-2-4=198G

物理核:虚拟核 =1:2
每个container的物理核数量是4个,56*2/4=28个container容器

确定了最多分配28个container容器,每个容器的内存应该分配的容量是: 198/28==>7G

但是生产上正常取内存是2的倍数,随意内存定位8g
那么每个container的最大核数设置4,最大内存数设置8G

假如该节点还有组件,比如hbase regionserver进程,那么该如何设置?

总容量减就完事了。

所有的配置信息在yarn-default.xml文件中

内存参数默认值:

KEY VALUE DESC
yarn.nodemanager.resource.memory-mb -1 可以分配给容器的物理内存总量(以MB为单位)。
yarn.scheduler.minimum-allocation-mb 1024 RM上每个容器请求的最小分配
yarn.scheduler.maximum-allocation-mb 8192 RM上每个容器请求的最大分配

核数参数默认值:

KEY VALUE DESC
yarn.nodemanager.resource.cpu-vcores -1 可以为容器分配的vcore总数量。
yarn.scheduler.minimum-allocation-vcores 1 RM上每个容器请求的最小虚拟CPU核心分配。
yarn.scheduler.maximum-allocation-vcores 4 RM上每个容器请求的最大虚拟CPU核心分配。
Yarn调度器

1.FIFO 先进先出
在这里插入图片描述
2.Capacity 计算
有一个专门的队列来运行小任务,
但是为了小任务专门设置一个队列预先占用一定的集群资源。
这会导致大任务的执行时间落后FIFO的调度时间
在这里插入图片描述
3.Fair 公平
在这里插入图片描述

在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如上图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

需要注意的是,在上图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成

apache 默认计算:
yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

CDH 默认公平:
web Fair

发布了45 篇原创文章 · 获赞 1 · 访问量 1764

猜你喜欢

转载自blog.csdn.net/wzj_wp/article/details/103632956