yarn-资源管理container容器配置详解

开题引文:

yarn是hadoop2.x引入的概念,hadoop1.x这个工作是MapReduce做的,在2.x引入了yarn,yarn是用来做资源管理和任务调度,本文详细介绍了yarn在生产上如何资源管理,即yarn的container容器.

1,相关介绍

内存:电脑cpu处理数据是不能直接从硬盘调用的,就好像我们的大脑从神经元之中读取记忆要通过长长的神经,内存条就承接啦电脑cpu于硬盘之间的数据交换所以内存条的好坏也很大程度决定了电脑处理速度的快慢。

显卡:这个部件相信大部分游戏玩家都相当了解,显卡就是负责将电脑的信号转变成图像显示,打游戏主要就是看画面,所以显卡的好坏直接决定啦一台电脑的游戏性能。

CPU:中央处理器,cpu是电脑最主要的部件,当然也是最贵的部分!cpu对于我们人体来说就好像我们的大脑,它是电脑处理各种文件程序的核心部件,它的快慢直接决定啦电脑的运行的快慢。

三者介绍取自百度百科,一定要看一下,然后下面理解起来就很好理解了

2,yarn的container容器是什么?

yarn的container容器是yarn虚拟出来的一个东西,属于虚拟化的,它是由memory+vcore组成,是专门用来运行任务的

vcore:yarn虚拟化出来的东西,一个物理cpu(电脑真实cpu)=2个vcore,可以在yarn的参数里面设置
这个概念是yarn自己发明创建的,自己引入,设计的初衷是考虑不同机器,不同服务器cpu性能不一样,每个cpu计算能力不一样,比如某个物理cpu是另外一个物理cpu的两倍计算能力,
这时通过设计第一个计算能力强的物理cpu虚拟一点core给这个能力不行的cpu,弥补差异,相当于计算时候,把这个牛皮的cpu划分一点虚拟core出来,帮助这个不牛皮cpu干点活,但是呢,这个是理想
实际情况下,yarn并没有实现上面这样,变成大家都是用虚拟core,默认值一般都是2,就是一个物理cpu的core对应2个虚拟的core,一般不会修改这个参数配置

3,生产上面参数设置

服务器,内存128G,16物理core
首先装完系统之后,linux系统会占用1G左右内存,而且生产上面你一定要预留大概20%的内存左右,这20%内存包括这1G内存

为什么要预留20%内存呢?
1,防止出现OOM-KILL机制
oom-kill机制简单可以理解成比如内存128G,你一段时间运行任务内存超出这个128G,linux就会自动帮你kill掉一些任务,减少内存的消耗,从而实现对内存条的保护
oom-kill机制可以关掉,但是不建议关闭,因为这个linux系统对内存的保护
2,防止linux系统夯住
3,给未来部署新的软件留出空余
也就是128*20%约等于26G
还剩下102G可以用来操作

4,DataNode和nodemanager进程本身占用内存

生产上面DataNode自己本身配置内存2G左右就可以了,这里说的是DataNode进程自己本身需要的内存是2G左右,我刚来公司,我同事他们配置的DataNode的内存有的给他6G,其实没有用,因为我在生产上面已经多次观察过,DataNode的这个进程耗费也就在1G多一点的进程,所以2G足够,因为DataNode耗费的内存收到他的磁盘IO影响,他的磁盘IO速度是有限的,所以你给他再多的内存没有意义

生产上面nodemanager进程一般给他4G左右就可以了,

所以还剩下102-2-4=96G内存,这个96G内存就是我们的container容器的内存了,也就是干活的内存

5,容器container的内存相关参数配置

上面计算完了剩余可用内存是96G

yarn.nodemanager.resource.memory-mb
上面指的是yarn的所有container容器能够使用的总内存

yarn.scheduler.minimum-allocation-mb
上面指的是单个container容器能够分配的最小内存

yarn.scheduler.maximum-allocation-mb
上面指的是单个container容器能够分配的最大内存

6,容器container的cpu相关参数配置

yarn.nodemanager.resource.pcores-vcores-multiplier
这个指的是虚拟cpu和物理cpu之间的比例,默认一个物理cpu=2个虚拟cpu

yarn.nodemanager.resource.cpu-vcores
上面指的是最大虚拟CPU的使用数量,物理16core=32vcore

yarn.scheduler.minimum-allocation-vcores
上面指的是单个container容器能够占用最小vcore数量

yarn.scheduler.maximum-allocation-vcores
上面指的是单个container容器能够占用的做大vcore数量

7,极限平衡值

通过上面介绍的7个关于内存和core的参数,但是此刻你肯定会有疑问,那么如何才能让单个container容器使用的内存和vcore达到一个相对平衡的状态,即一个container把一个小任务跑完了,耗费的内存不是很大,然后耗费的vcore也不是很多,而不是出现耗费vcore很多而内存很小,或者内存很大,vcore很少的情况,这个就是我们想寻找的极限平衡值

这个极限平衡值是是需要找打一个突破口,这个突破口就是下面这个参数的配置
yarn.scheduler.maximum-allocation-vcores

cdh官方经过长期的大浪的实践,给出了一个平衡值,这个值很权威,是cdh官方多次测试结果.上面这个参数值<=5,所以我在实际生产项目设置为4,在生产上面能够完美运行.

8,极限平衡值下参数设置

上面机器剩余的102G和16核为例

vcore数量配置
yarn.nodemanager.resource.cpu-vcores 32
yarn.scheduler.minimum-allocation-vcores 1
yarn.scheduler.maximum-allocation-vcores 4
上面三个参数设置完成之后,意思是16核都用来做vcore,单个container容器能够使用的最小vcore数量=1,最大vcore=4,即容器的数量可以使8-32个.

内存大小配置
因为上面vcore数量我们已经按照官方权威测试配置,内存也是作出相关配置,也保障最少的容器数量也是8个,即96/8=12,即但个容器配置的最大内存数量为12G
yarn.nodemanager.resource.memory-mb 96G
yarn.scheduler.minimum-allocation-mb 1G
yarn.scheduler.maximum-allocation-mb 12G 极限情况下,是只有8个container容器

但是实际情况下,单个container容器数量12G有点大了,你想想你的电脑内存才多大,我一般生产上面设置8G就够了,不过设置12G也是没有任何毛病的.

9,参数补充

yarn.nodemanager.pmem-check-enabled true
生产设置为true pmem指的是默认检查物理内存,容器使用的物理内存不能超过我们限定的内存大小,因为我们上面设置了所有容器能够使用的最大内存数量,超出这个内存限制,任务就会被kil掉.比如yarn查看资源还剩下2个G能用,但是任务申请了3个G内存,肯定超出了
yarn.nodemanager.vmem-check-enabled true
生产设置为true vmem指的是默认检查虚拟内存,容器使用的虚拟内存不能超过我们设置的虚拟内存大小
yarn.nodemanager.vmem-pmem-ratio 2.1
物理内存和虚拟内存的比例是2.1:1,也就是1G物理内存对应的2.1G得虚拟内存

你可能感兴趣的:(yarn-资源管理container容器配置详解)