yarn的资源调优

1.概念
作业,job,application,应用,都是同一个意思

Container: 容器,Yarn的组件,虚拟的概念
将一定的内存CPU 比如 1G 1vcore资源抽象为一个小房间,来运行任务

2.yarn的资源调优
参照这张图:


①内存方面:
假如一台机器是64G物理内存,一般16物理core,对应的32个虚拟core(32vcore)
Linux系统本身要占内存+空留: 20% =12.8 G (生产上一般20%–30%都是可以的)
(当机器内存剩余的特别少的时候,有些操作系统会触发OOM killer的机制,把使用内存最大的
进程给kill掉,所以要有剩余的内存,让机器有些缓冲。)
剩余: 80% =51.2G=51G (这80%就是给大数据用的组件、部署的进程所使用的,因为是主从架
构,都是小弟干活,小弟占的最多)
包括NameNode进程 和 DataNode进程
NameNode进程:4G
DataNode进程:4G

②资源内存:
51G (这51G是做什么?就是运行container容器)

yarn.nodemanager.resource.memory-mb 这里我们是设置51*1024 (这是总的大小)
yarn.scheduler.minimum-allocation-mb 官方默认1024 (最小可分配容器的大小)
yarn.scheduler.maximum-allocation-mb 官方默认8192 (最大可分配容器的大小)

51G 51G/1G=51个container (总共51G,如果全是最小的容器,就是51个容器)
51G 51/8=6个container …3G (总共51G,如果全是最大的容器,就是6个容器,还有3G浪费了)
51个~6个 这台机器可以运行6-51个容器。

题目:以下配置有多少个容器
yarn.nodemanager.resource.memory-mb : 50G
yarn.scheduler.minimum-allocation-mb : 1G
yarn.scheduler.maximum-allocation-mb : 50G

最大容器数:50G/50G=1 core
最少容器数:50G/1G=50 cores
答:1到50个容器

③vcore:虚拟的core
yarn.nodemanager.resource.cpu-vcores:32 表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。
yarn.scheduler.minimum-allocation-vcores:1 单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。
yarn.scheduler.maximum-allocation-vcores:32 单个任务可申请的最多虚拟CPU个数,默认是4。
container的个数的范围:32

在公司可以设定vcore数量为物理core的两倍:core:vcore = 1:2

vcores 虚拟core yarn提出的可以参考下面的博客:
http://blog.itpub.net/30089851/viewspace-2127851/

问题:一个容器既有内存,又有CPU,那么内存和CPU分配的数量,是不是要接近于相等?是的

yarn.nodemanager.resource.memory-mb 50G
yarn.scheduler.minimum-allocation-mb 2G
yarn.scheduler.maximum-allocation-mb 8G
(从这个可以看出来,可以启用50/2=25,50/8=6,也就是可以启用6-25个容器)

yarn.nodemanager.resource.cpu-vcores 32
yarn.scheduler.minimum-allocation-vcores 1
yarn.scheduler.maximum-allocation-vcores 4
(从这个可以看出来,可以启用32/1=32,32/4=8,也就是可以启用8-32个容器)

container:
memory 25container~6container
vcores 32container~8container
生产上,需求肯定是要取最大的,32到8个容器,但是按照上面来说,容器的最终个数是上面最小的来决定的,就是25到6个容器。如果你想要用6个容器,这个时候就用不了,那另外的19个G的内存你就浪费了。如果你想要调到最大,你就需要适当的调整这些参数,说白了就是资源最大化。
比如下面设置成:
yarn.nodemanager.resource.cpu-vcores 25
yarn.scheduler.minimum-allocation-vcores 1
yarn.scheduler.maximum-allocation-vcores 4
这样是可以的,vcores就是25c~6c了,和memory一样了。


看博客:YARN的Memory和CPU调优配置详解

http://blog.itpub.net/30089851/viewspace-2127851/

posted @ 2022-05-09 12:36  linhaifeng  阅读(819)  评论(0编辑  收藏  举报