yarn内存配置指南

yarn中需要很多内存配置,本文只给一些推荐和建议,实际还根据具体业务逻辑来定

首先,需要明确,yarn中,整个集群的资源需要内存、硬盘、CPU(CPU核数)三者来决定,必须要实现三者的均衡,在实际生产环境中,硬盘都是足够大的,所以很少考虑硬盘,这里暂时也把硬盘作为一个要素作为参考项。

在计算节点可用内存的时候,需要考虑操作系统系统的内存需求、NM的内存需求以及该节点其他系统的内存需求(比如Hbase,下面均以Hbase为例),

因此yarn可用内存=系统总内存-为操作系统保留内存-为Hbase保留内存

操作系统和Hbase内存参考值如下

节点总内存 操作系统预留的内存 Hbase预留的内存
4 GB 1 GB 1 GB
8 GB 2 GB 1 GB
16 GB 2 GB 2 GB
24 GB 4 GB 4 GB
48 GB 6 GB 8 GB
64 GB 8 GB 8 GB
72 GB 8 GB 8 GB
96 GB 12 GB 16 GB
128 GB 24 GB 24 GB
256 GB 32 GB 32 GB
512 GB 64 GB 64 GB

那么,每个节点最大的Containers数可以通过如下公式计算

Containers=min(2*CPU,1.8DISKS,(yarn可用内存)/每个container最小内存)

每个container最小内存又依赖于yarn可用内存,最小内存的和可用内存关系如下:

每个节点可用内存 Container最小内存推荐值
Less than 4 GB 256 MB
Between 4 GB and 8 GB 512 MB
Between 8 GB and 24 GB 1024 MB
Above 24 GB 2048 MB

根据上面这些参考值和计算公式,可以计算出节点的Container个数,那么每个Container可使用的内存可以通过如下公式求得

每个Container内存=max(container最小内存,yarn可用内存/container个数)

通过上面的计算,YARN和MR的内存推荐配置如下:

配置文件 配置项名称 配置项值
yarn-site.xml yarn.nodemanager.resource.memory-mb = Containers个数* 每个Container内存
yarn-site.xml yarn.scheduler.minimum-allocation-mb = 每个Container内存
yarn-site.xml yarn.scheduler.maximum-allocation-mb = Containers个数* 每个Container内存
mapred-site.xml mapreduce.map.memory.mb = 每个Container内存
mapred-site.xml mapreduce.reduce.memory.mb = 2 * 每个Container内存
mapred-site.xml mapreduce.map.java.opts = 0.8 * 每个Container内存
mapred-site.xml mapreduce.reduce.java.opts = 0.8 * 2 * 每个Container内存
yarn-site.xml (check) yarn.app.mapreduce.am.resource.mb = 2 * 每个Container内存
yarn-site.xml (check) yarn.app.mapreduce.am.command-opts = 0.8 * 2 * 每个Container内存

同时HDP为了简化计算,还发行了一个python脚本yarn-util.py,该脚本有四个参数

参数 描述
-c CORES 每个节点CPU核数
-m MEMORY 每个节点内存总数(单位G)
-d DISKS 每个节点的硬盘个数
-k HBASE 如果安装了Hbase则为True,否则为False

例如16核CPU、64G内存、4块硬盘,未安装Hbase的情况下,其计算推荐配置如下

Using cores=16 memory=64GB disks=4 hbase=False
 Profile: cores=16 memory=57344MB reserved=8GB usableMem=56GB disks=4
 Num Container=8
 Container Ram=7168MB
 Used Ram=56GB
 Unused Ram=8GB
 yarn.scheduler.minimum-allocation-mb=7168
 yarn.scheduler.maximum-allocation-mb=57344
 yarn.nodemanager.resource.memory-mb=57344
 mapreduce.map.memory.mb=7168
 mapreduce.map.java.opts=-Xmx5734m
 mapreduce.reduce.memory.mb=7168
 mapreduce.reduce.java.opts=-Xmx5734m
 yarn.app.mapreduce.am.resource.mb=7168
 yarn.app.mapreduce.am.command-opts=-Xmx5734m
 mapreduce.task.io.sort.mb=2867


该脚本下载地址yarn-util.py

你可能感兴趣的:(Hadoop,Hadoop私房菜)