浅谈YARN中Container容器(内存、CPU分配)

    前言:hadoop2.x版本和hadoop1.x版本的一个区别就是:hadoop1.x中负责资源和作业调度的是MapReduce,hadoop2.x版本后,MapReduce只专注于计算,资源和作业的调度由YARN来负责。Container是YARN里面资源分配的基本单位,具有一定的内存以及CPU资源。我们的应用在工作的时候,需要消耗内存和CPU,故当YARN收到application申请,则会根据application申请的资源,分配Container。

    在YARN的NodeManager节点上,会将机器的CPU和内存的一定值抽离出来,抽离成虚拟的值,然后这些虚拟的值在根据配置组成多个Container,当application提出申请时,就会分配相应的Container资源。关于默认值我们可以查看官网,如下表所示。

参数 默认值
yarn.nodemanager.resource.memory-mb
-1
yarn.nodemanager.resource.cpu-vcores
-1
yarn.scheduler.minimum-allocation-mb
1024MB
yarn.scheduler.maximum-allocation-mb
8192MB
yarn.scheduler.minimum-allocation-vcores
1
yarn.scheduler.maximum-allocation-vcores
4

    内存配置

    yarn.nodemanager.resource.memory-mb默认值为-1,代表着YARN的NodeManager占总内存的80%。也就是说加入我们的机器为64GB内存,出去非YARN进程需要的20%内存,我们大概需要64*0.8≈51GB,在分配的时候,单个任务可以申请的默认最小内存为1G,任务量大的话可最大提高到8GB。

    在生产场景中,简单的配置,一般情况下:yarn.nodemanager.resource.memory-mb直接设置成我们需要的值,且要是最大和最小内存需求的整数倍;(一般Container容器中最小内存为4G,最大内存为16G)

    假如:64GB的机器内存,我们有51GB的内存可用于NodeManager分配,根据上面的介绍,我们可以直接将yarn.nodemanager.resource.memory-mb值为48GB,然后容器最小内存为4GB,最大内存为16GB,也就是在当前的NodeManager节点下,我们最多可以有12个容器,最少可以有3个容器。

    CPU配置

    此处的CPU指的是虚拟的CPU(CPU virtual core),之所以产生虚拟CPU(CPU vCore)这一概念,是因为物理CPU的处理能力的差异,为平衡这种差异,就引入这一概念。

    yarn.nodemanager.resource.cpu-vcores表示能够分配给Container的CPU核数,默认配置为-1,代表值为8个虚拟CPU,推荐该值的设置和物理CPU的核数数量相同,若不够,则需要调小该值。

    yarn.scheduler.minimum-allocation-vcores的默认值为1,表示每个Container容器在处理任务的时候可申请的最少CPU个数为1个。

    yarn.scheduler.maximum-allocation-vcores的默认值为4,表示每个Container容器在处理任务的时候可申请的最大CPU个数为4个。

PS:以上内容是小编我学习的理解,以上所示的参数为配置过程中基本的参数,如果想配置更为合理,资源利用率更高,可参考小编转载的两篇文章,初学者,如有错误请指出,谢谢。

YARN和MapReduce的内存配置优化

YARN的memory和CPU配置详解

你可能感兴趣的:(Hadoop)