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
<-mb
上⾯指的是yarn的所有container容器能够使⽤的总内存
yarn.scheduler.minimum-allocation-mb
上⾯指的是单个container容器能够分配的最⼩内存
yarn.scheduler.maximum-allocation-mb
上⾯指的是单个container容器能够分配的最⼤内存
6,容器container的cpu相关参数配置
这个指的是虚拟cpu和物理cpu之间的⽐例,默认⼀个物理cpu=2个虚拟cpu
上⾯指的是最⼤虚拟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.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
<-mb 96G
yarn.scheduler.minimum-allocation-mb 1G
yarn.scheduler.maximum-allocation-mb 12G 极限情况下,是只有8个container容器
但是实际情况下,单个container容器数量12G有点⼤了,你想想你的电脑内存才多⼤,我⼀般⽣产上
⾯设置8G就够了,不过设置12G也是没有任何⽑病的.
9,参数补充
⽣产设置为true pmem指的是默认检查物理内存,容器使⽤的物理内存不能超过我们限定的内存⼤⼩,因为我们上⾯设置了所有容器能够使⽤的最⼤内存数量,超出这个内存限制,任务就会被kil掉.⽐如yarn查看资源还剩下2个G能⽤,但是任务申请了3个G内存,肯定超出了
⽣产设置为true vmem指的是默认检查虚拟内存,容器使⽤的虚拟内存不能超过我们设置的虚拟内存⼤⼩
物理内存和虚拟内存的⽐例是2.1:1,也就是1G物理内存对应的2.1G得虚拟内存