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 ...
随机推荐
- form 中Enctype=multipart/form-data 的作用
form 中Enctype=multipart/form-data 的作用 ENCTYPE="multipart/form-data"用于表单里有图片上传. <form na ...
- java:Map借口及其子类HashMap二
java:Map借口及其子类HashMap二 重点:所有的集合必须依赖Iterator输出 Map<String, Integer> map = new HashMap<String ...
- Struts调用DMI
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
- linux应用之xampp集成环境的安装及配置(centos)
1.xampp集成环境的下载 在xampp的官网上选择对应系统的版本进行下载,官网地址:https://www.apachefriends.org/zh_cn/index.html #wget htt ...
- 【leetcode刷题笔记】Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- 批量修改mysql的表前缀
如何批量修改mysql的表前缀名称教程中将涉及两种方法修改,一种是批量修改(使用php脚步完成)一种是精确修改(使用sql查询语句完成). 方法一:使用sql语句修改mysql数据库表前缀名 首先我们 ...
- React 版 V2EX 社区( react & react-router & axios & antd ui)
目录 项目简介 在线演示 截图演示 踩坑 项目简介(1/4) Github: https://github.com/bergwhite/v2ex-react 项目使用React.Reac-router ...
- HDOJ1015(简单深搜)
Safecracker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- lvs+keepalived和haproxy+heartbeat区别
最近一直在看一些高可用性的负载均衡方案,当然那些f5之类的硬件设备是玩不起也接触不到了.只能看这些for free的开源方案. 目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实 ...
- Myeclipse如何使用Maven添加jar包
很多新手都不知道如何在maven项目里添加jar包. 以前我还没接触maven的时候下载过一个demo,是maven项目. 我居然是照着他的pom.xml文件一个一个的写!!! 很多人认为理所当然的东 ...