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 (2*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 的值,以释放更多的内存给其它应用。

原文地址:https://www.cnblogs.com/langfanyun/p/10831594.html

时间: 2024-10-09 10:18:40

HDP3.1 中 YRAN 和 MR2 的内存大小配置的计算方式的相关文章

dx11 入门 Tutorial 04: DX、HLSL中矩阵的内存存储和数学计算方式 DirectXSampleBrowser(June 2010)

主要是两方面: 1.shader数据和dx的通信,使用constant Buffer 2.矩阵的数学计算方式和内存存储方式再DX和HLSL中的异同 先说第一个: dx中的常量数据matrix等传入shader中流程: The first thing that we need to do is declare three constant buffer variables. Constant buffers are used to store data that the application n

如何去计算hdfs中namenode中所需的堆内存大小

请参考 上一个 链接地址:hdfs为什么不擅长存储大量小文件https://blog.51cto.com/12445535/2354951 概述:namenode replication(复制)复制 默认块复制因子(dfs.replication)为3.复制影响磁盘空间但不影响内存消耗.复制会更改每个块所需的存储量,但不会更改块的数量.如果DataNode上的一个块文件(由NameNode上的一个块表示)被复制三次,则块文件的数量将增加三倍,但不会代表它们的块数. 关闭复制时,一个192 MB的

tomcat 内存大小配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能.比如说在应用程序用到最大内存的时候,JVM是要先去做垃圾回收的动作,释放被占用的一些内存.所以想调整Tomcat的启动时初始内存和最大内存就需要向JVM声明,一般的JAVA程序在运行都可以通过中-Xms -Xmx来调整应用程序的初始内存和最大内存:  这两个值的大小一般根据需要进行设

windows下配置tomcat服务器的jvm内存大小的两种方式

难得遇到一次java堆内存溢出(心里想着,终于可以来一次jvm性能优化了$$) 先看下报错信息, java.lang.OutOfMemoryError: GC overhead limit exceeded 错误就是发出了这样的信号: 执行垃圾收集的时间比例太大, 有效的运算量太小. 默认情况下, 如果GC花费的时间超过 98%, 并且GC回收的内存少于 2%, JVM就会抛出这个错误. 造成这个问题的原因可能是项目里某个地方定义的太多的map,list对象,或者一次从数据库中查询的数据量过大.

C++中的类所占内存空间总结

C++中的类所占内存空间总结 最近在复习c++的一些基础,感觉这篇文章很不错,转载来,大家看看! 类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的. 摘抄部分: 成员函数还是以一般的函数一样的存在.a.fun()是通过fun(a.this)来调用的.所谓成员函数只是在名义上是类里的.其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码.而我们访问类的成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table

VMware ESXi中不能显示CPU及内存使用情况的解决方法

今天一个网友问我,他管理的机房有4台ESXi 5.1的服务器,其中三台ESXi Server不能显示各个虚拟机占用的CPU.内存情况了,如图1-1所示. 图1-1在"虚拟机"选项卡中不能显示每个启动虚拟机的资源占用情况 另外,在VMware ESXi的"摘要"中,CPU与内存的使用情况也统计出错,如图1-2所示. 图1-2 摘要统计出错 在出现这个问题时,各个ESXi Server上的虚拟机可以正常启动.关闭,并且各虚拟机运行的系统及应用不受影响. 从上面两个图我看

C语言中的编译时分配内存

1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放,分为全局初始化区和全局未初始化区: 4.字符常量区 --常量字符串放与此,程序结束时由系统释放: 5.程序代码区--存放函数体的二进制代码 例: //main.c int a=0; //全局初始化区 char *p1; //全局未初始化区 void main() { int b; //栈 char

【翻译自mos文章】在使用Linux大页内存的配置中,使用drop_cache时导致的ORA-600 [KGHLKREM1]问题

在使用Linux大页内存的配置中,使用drop_cache时导致的ORA-600 [KGHLKREM1]问题 来源于: ORA-600 [KGHLKREM1] On Linux Using Parameter drop_cache On hugepages Configuration (文档 ID 1070812.1) 适用于: Oracle Database - Enterprise Edition - Version 10.2.0.1 and later Generic Linux ***C

java中的各种数据类型在内存中存储的方式

1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间.释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作.但同时,它也加重了JVM的工作.因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请.引用.被引用.赋值等,GC都需要进行监控. 2.什么叫java的内存泄露 在j