HDP3.1 中 YRAN 和 MR2 的内存大小配置的计算方式
Container 是 YARN 中基本的处理单元,它是对内存、CPU等计算的封装。总的来说,每个core每块硬盘 分配2个 container,能获得较好的集群利用率。
1. 确定可用内存大小。
对于每台主机来说,YARN 和 MapReduce 能用内存大小是除去预留给系统的内存(如果还有 HBase,还要相应留内存给它)后的大小,即:
YARN 可用内存(RAM for YARN) = 总内存(Total RAM) - 系统预留(Reserved for System) - HBase预留(Reserved for HBase)
以下是预留内存大小的推荐表
| 每台 Node 的总内存 | 给系统预留的内存 | 给 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 |
2. 计算每个 Node 最大允许的 container 的数量
最大container 数量 = min (*CORES, 1.8*DISKS, (总的可用内存) / MIN_CONTAINER_SIZE)
上面 CORES 指的是核数,DISKS 是硬盘数, MIN_CONTAINER_SIZE 是 container 最小的内存大小。
MIN_CONTAINER_SIZE 推荐表:
| 每个 Node 总内存 | 推荐的 Minimum Container Size |
| 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 |
3. 计算 RAM-per-Container
RAM-per-container = max(MIN_CONTAINER_SIZE, (总内存) / containers))
通过上面计算得到的值,可以按下表进行配置
| 配置文件 | 配置项 | 数值计算公式 |
| yarn-site.xml | yarn.nodemanager.resource.memory-mb | = containers * RAM-per-container |
| yarn-site.xml | yarn.scheduler.minimum-allocation-mb | = RAM-per-container |
| yarn-site.xml | yarn.scheduler.maximum-allocation-mb | = containers * RAM-per-container |
| mapred-site.xml | mapreduce.map.memory.mb | = RAM-per-container |
| mapred-site.xml | mapreduce.reduce.memory.mb | = 2 * RAM-per-container |
| mapred-site.xml | mapreduce.map.java.opts | = 0.8 * RAM-per-container |
| mapred-site.xml | mapreduce.reduce.java.opts | = 0.8 * 2 * RAM-per-container |
| yarn-site.xml (check) | yarn.app.mapreduce.am.resource.mb | = 2 * RAM-per-container |
| yarn-site.xml (check) | yarn.app.mapreduce.am.command-opts | = 0.8 * 2 * RAM-per-container |
下面以单台节点具有 12 core,48G内存, 12 块硬盘 举例
(1)预留内存(Reserved RAM) = 6G(系统) + 8G(HBase)
(2)MIN_CONTAINER_SIZE = 2G
(3)container_num = min (2*12, 1.8* 12, (48-6-8)/2) = min (24, 21.6, 17) = 17
(4)RAM-per-container = max (2, (48-6-8)/17) = max (2, 2) = 2
得出如下配置项的值
| 配置项 | 计算得到的值 |
| yarn.nodemanager.resource.memory-mb | = 17 * 2 = 34*1024 MB |
| yarn.scheduler.minimum-allocation-mb | = 2*1024 MB |
| yarn.scheduler.maximum-allocation-mb | = 17 * 2 = 34*1024 MB |
| mapreduce.map.memory.mb | = 2*1024 MB |
| mapreduce.reduce.memory.mb | = 2 * 2 = 4*1024 MB |
| mapreduce.map.java.opts | = 0.8 * 2 = 1.6*1024 MB |
| mapreduce.reduce.java.opts | = 0.8 * 2 * 2 = 3.2*1024 MB |
| yarn.app.mapreduce.am.resource.mb | = 2 * 2 = 4*1024 MB |
| yarn.app.mapreduce.am.command-opts | = 0.8 * 2 * 2 = 3.2*1024 MB |
注意:
1. 改变 yarn.scheduler.minimum-allocation-mb 或 yarn.scheduler.minimum-allocation-mb,可以改变单个 Node 中 container 的数量
2. 如果 Node 具有较高的 RAM,但是较少的 cores 或 disks,可以减少 yarn.scheduler.minimum-allocation-mb 和 yarn.scheduler.minimum-allocation-mb 的值,以释放更多的内存给其它应用。
HDP3.1 中 YRAN 和 MR2 的内存大小配置的计算方式的更多相关文章
- Android中一张图片占据的内存大小是如何计算
本篇文章已授权微信公众号 hongyangAndroid (鸿洋)独家发布 最近封装了个高斯模糊组件,正好将图片相关的理论基础也梳理了下,所以,这次就来讲讲,在 Android 中,怎么计算一张图片在 ...
- tomcat 内存大小配置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会 ...
- windows下配置tomcat服务器的jvm内存大小的两种方式
难得遇到一次java堆内存溢出(心里想着,终于可以来一次jvm性能优化了$$) 先看下报错信息, java.lang.OutOfMemoryError: GC overhead limit excee ...
- C++等语言中整型int等的取值范围计算方式
举short为例说明 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767.最小为1111111111111111=-2的15次方减1=-32767此时 ...
- mysql 分配内存大小配置
优化 innodb_buffer_pool_size = 10*1024*1024*1024
- Ehcache计算Java对象内存大小
在EHCache中,可以设置maxBytesLocalHeap.maxBytesLocalOffHeap.maxBytesLocalDisk值,以控制Cache占用的内存.磁盘的大小(注:这里Off ...
- HDP 中 yarn 和 MR2 的配置
以下说明均以集群中 slave 结点的配置为 48G内存,12块硬盘,12核(core) CPU 为例. 在 Yarn 中,一个 Container 是一个基础的包含内存和CPU 的单元.为了较好的平 ...
- c中的进制与内存分析
一. 进制 1. 什么是进制 l 是一种计数的方式,数值的表示形式 数一下方块的个数 汉字:十一 十进制:11 二进制:1011 八进制:13 l 多种进制:十进制.二进制.八进制.十六进制. ...
- Android中一张图片加载后所占用内存大小的获取与测试
Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃.这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制(有16M,64M,128M,2 ...
随机推荐
- MySQL查询in操作 查询结果按in集合顺序显示
偶尔看到的...或许有人会注意过,但我以前真不知道 SQL: select * from table where id IN (3,6,9,1,2,5,8,7); 这样的情况取出来后,其实,id还是按 ...
- php:如何使用PHP排序, key为字母+数字的数组(多维数组)
你还在为如何使用PHP排序字母+数字的数组而烦恼吗? 今天有个小伙伴在群里问:如何将一个key为字母+数字的数组按升序排序呢? 举个例子: $test = [ 'n1' => 22423, 'n ...
- myeclipse+maven
1.Windows-->Preferences-->MyEclipse-->Maven4MyEclipse 2.Installations-->Add:添加Mavan 3.Us ...
- python3反射解析
python反射解析 一. 简介 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某 ...
- Python解决中文字符的问题
from __future__ import unicode_literals print(type("test")) #<type 'unicode'> Chinat ...
- WingIDE用法笔记
注释代码块 方法一: ''' 被注释的代码块 ''' 方法二: 选中要注释的代码块后 Ctrl + /,则选中的每一行都被# , 用这种方法注释的代码,用Shift + Ctrl + / ...
- linux命令学习笔记(12):more命令
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便 使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就 ...
- Python 爬虫 —— 文件及文件夹操作
0. 文件名.路径信息.拓展名等 #取文件后缀 >>> os.path.splitext("/root/a.py") ('/root/a', '.py') #取目 ...
- 8个Javascript小技巧,让你写的代码有腔调
如果你想确保你的JavaScript在大多数浏览器和移动设备中都可以工作,那么我从大漠等大神指导,原来可以使用f2etest,也可以使用Endtest,browserstack等 1. 使用 + 字符 ...
- POJ1041 John's trip
John's trip Language:Default John's trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...