YARN和MapReduce的内存设置参考
如何确定Yarn中容器Container,Mapreduce相关参数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集、内存密集)我们需要根据经验提供给我们一个参考配置值,来作为基础的配置。
完成这一任务有两种方式,确定YARN和MapReduce的内存设置,我们可以使用HDP工具脚本进行内存配置设定
运行hdp-configuration-utils.py 这个Python脚本(下载地址:hdp-configuration-utils)来计算YARN、MapReduce需要的内存,执行以下命令
|
python hdp-configuration-utils.py options |
其中可选项如下:
|
选项 |
描述 |
|
-c CORES |
每一个客户机的核数目 |
|
-m MEMORY |
每一个客户机拥有的内存总数 |
|
-d DISK |
每一个客户机拥有的磁盘数目 |
|
-k HBASE |
如果Hbase安装了为”True”,否则为”False” |
注:需要python26的运行环境
我们可以使用-h或-help来显示描述选项的帮助信息。
例子
运行下面的命令
|
python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True |
结果如下:

手动计算YARN和MapReduce内存配置设置
接下来我们将描述如何基于特定的硬件,手工的设置YARN和MapReduce内存。
YARN可以考虑集群中所有节点的可用的计算机资源。基于可用的资源,YARN会沟通协调应用程序(如:mapReduce)需要的资源。YARN会为每一个应用提供相应的容器Container。容器Container是YARN的基本处理单元,是内存和CPU资源的一种封装。
在Hadoop集群中,平衡内存RAM、处理器cpu和磁盘的使用是非常重要的。作为一般的推荐,为每个磁盘和每个核分配两个容器,为集群的利用率提供了最好的平衡。
当为一个集群决定合适的YARN和MapReduce内存设置时,从可用的硬件资源开始,注意每个节点的以下值:
|
RAM(内存的数量) CORES(CPU的核数) DISKS(磁盘的数目) |
整个针对YARN和MapReduce可用的RAM数,应该考虑预留的内存。预留的内存主要用于系统进程占用和其它Hadoop进程(如Hbase)。
|
预留的内存=保留栈内存+Hbase预留内存(如果Hbase是部署在同一台机器上) |
我们通常会使用下表来决定预留内存的大小
|
每个节点的总内存 |
推荐系统保留的内存 |
推荐为hbase保留的内存 |
|
4GB |
1GB |
1GB |
|
8GB |
2GB |
1GB |
|
16GB |
2GB |
2GB |
|
24GB |
4GB |
4GB |
|
48GB |
6GB |
8GB |
|
64GB |
8GB |
8GB |
|
72GB |
8GB |
8GB |
|
96GB |
12GB |
16GB |
|
128GB |
24GB |
24GB |
|
256GB |
32GB |
32GB |
|
512GB |
64GB |
64GB |
接下来我们计算决定每个节点允许的最大容器的数目,我们可以使用下列公式:
|
containers = min (2*CORES, 1.8*DISKS, (Total available RAM) /MIN_CONTAINER_SIZE) |
其中DISKS是参数每台机器中dfs.data.dirs参数的数目值。MIN_CONTAINER_SIZE是最小的容器大小(RAM)。这个值是依赖于RAM的可用数目——小的内存节点,最小的容器大小应该更小。
容器推荐值
|
每个节点的总内存 |
推荐的最小容器大小 |
|
小于4GB |
256MB |
|
在4GB和8GB之间 |
512MB |
|
在8GB和24GB |
1024MB |
|
大于24GB |
20148MB |
最终的计算结果决定了每个容器的RAM的数目。
|
RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers)) |
因为这些计算,YARN和MapReduce设置如下
|
配置文件 |
配置设定 |
计算值 |
|
Yarn-site.xml |
yarn.nodemanager.resource.memorymb |
=containers*RAM-per-container |
|
Yarn-site.xml |
yarn.scheduler.minimum-allocationmb |
= RAM-per-container |
|
yarn-site.xml |
yarn.scheduler.maximum-allocationmb |
=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 |
|
mapred-site.xml |
yarn.app.mapreduce.am.resource.mb |
= 2 * RAM-per-container |
|
mapred-site.xml |
yarn.app.mapreduce.am.commandopts |
= 0.8 * 2 * RAM-per-container |
注:在安装好后,yarn-site.xml and mapred-site.xml位于文件夹/etc/Hadoop/conf目录
举例说明:
集群节点拥有12个CPU核,48GB内存和12块磁盘
保留内存(Reserved Memory)=6GB系统预留内存+(如果有Hbase)8GB的Hbase内存
最小的容器大小(Min container size)=2GB
含有的容器数(containers)=min(2*12,1.8*12,(48-6)/2)=min(24,21.6,21)=21
每个容器的RAM(RAM-per-container)=max(2,(48-6)/21)=max(2,2)=2
根据上述例子计算出来的值
|
配置 |
计算值 |
|
yarn.nodemanager.resource.memory-mb |
= 21 * 2 = 42*1024 MB |
|
yarn.scheduler.minimum-allocation-mb |
= 2*1024 MB |
|
yarn.scheduler.maximum-allocation-mb |
= 21 * 2 = 42*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 |
= 2 * 2 = 4*1024 MB |
|
yarn.app.mapreduce.am.command-opts |
= 0.8 * 2 * 2 = 3.2*1024 MB |
如果部署了HBase
容器数目(containers)=min(2*12,1.8*12,(48-6-8)/2)=min(24,21.6,17)=17
每个容器的RAM(RAM-per-container)=max(2,(48-6-8)/17)=max(2,2)=2
根据此时的值计算出来的值
|
配置 |
计算值 |
|
yarn.nodemanager.resource.memory-mb |
=17*2=34*1024MB |
|
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.nodemanager.resource.memory-mb yarn.scheduler.minimum-allocation-mb |
导致每个节点容器数目的改变。
2.如果你安装拥有很大数目的内存,而缺少磁盘和CPU核,你可以将内存释放给其它的任务,降低参数yarn.scheduler.minimum-allocation-mb
andyarn.nodemanager.resource.memory-mb的值
3.当前在YARN上运行MapReduce时。我们不在会去设置静态的Map和Reduce任务。整个集群将根据Job的需要动态的分配Map和Reduce任务。在我们的集群中,YARN可以在每个节点上分配10个Map和5个Reduce。
设置NameNode的对内存大小
NameNode的堆大小受很多的因数影响如文件的数目,块的数目和系统的负载。下面的表格提供了NameNode对大小的设定。这些设定经常用于典型的Hadoop集群,其中块的数目和文件的数目十分接近(一般而言,系统中平均每个文件的块数比例大概在1.1到1.2),总的来说将NameNode的堆内存设置的越大越好。
|
文件的数目(百万) |
整个java的堆(Xmx和Xms) |
年轻代大小 (-XX:NewSize-XX:MaxNewSize) |
|
<1 million files |
1024m |
128m |
|
1-5million files |
3072m |
512m |
|
5-10 |
5376m |
768m |
|
10-20 |
9984m |
1280m |
|
20-30 |
14848m |
2048m |
|
30-40 |
19456m |
2560m |
|
40-50 |
24320m |
3072m |
|
50-70 |
33536m |
4352m |
|
70-100 |
47872m |
6144m |
|
100-125 |
71424m |
8960m |
|
150-200 |
94976m |
8960m |
我们应该设置-XX:PermSize为128m –XX:maxPermSize为256m
下面是对Hadoop_NameNode_Opts参数的推荐设置,在配置文件hadoop-env.sh中(将下面的####替换成-XX:NewSize,-XX:MaxNewSize,-Xms,和-Xmx可以用上上面表中推荐的值)

-XX:+HeapDumpOnOutOfMemoryError这个参数指明了当内存错误出现时,堆的dump操作将会被执行。你也可以使用-XX:HeapDumpPath来指定heap dump文件的位置,如:另外一个有用的HADOOP_NAMENODE_OPTS参数是
|
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./etc/heapdump.hprof |
参考:http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html
http://blog.csdn.net/suifeng3051/article/details/45477773
YARN和MapReduce的内存设置参考的更多相关文章
- YARN和MapReduce的内存设置參考
怎样确定Yarn中容器Container,Mapreduce相关參数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集.内存密集)我们须要依据经验提供给我们一个參考配置值,来作为基础的配置. ...
- Oracle初始安装内存设置参考
预备知识 shared memory:共享内存段: 一个内存区域,可以被不同的进程读取.oracle使用它来构成sga.oracle使用以下三种方法来创建一个sga区: 1. 使用单个共享内存段. ...
- 大数据系列4:Yarn以及MapReduce 2
系列文章: 大数据系列:一文初识Hdfs 大数据系列2:Hdfs的读写操作 大数据谢列3:Hdfs的HA实现 通过前文,我们对Hdfs的已经有了一定的了解,本文将继续之前的内容,介绍Yarn与Yarn ...
- 经典MapReduce作业和Yarn上MapReduce作业运行机制
一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...
- 运行两个以上tomcat的设置及内存设置
运行两个或以上tomcat的设置方法 1.解决端口冲突问题设置方法很简单,修改conf/server.xml配置文件中的3个端口即可.默认端口:8005.8080.8009.一般情况位置如下:**** ...
- hadoop-集群管理(2)——内存设置
http://www.cnblogs.com/yuechaotian/archive/2013/03/08/2949607.html 1. 内存 hadoop为各个守护进程(namenode,seco ...
- 怎样通过Java程序提交yarn的mapreduce计算任务
因为项目需求,须要通过Java程序提交Yarn的MapReduce的计算任务.与一般的通过Jar包提交MapReduce任务不同,通过程序提交MapReduce任务须要有点小变动.详见下面代码. 下面 ...
- jvm内存设置及总结
http://dmouse.iteye.com/blog/1264118 jvm内存设置及总结 博客分类: java相关 Application情况: 大量使用了内存缓存,应用负载量较大,900w/d ...
- 2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法
1.WindowàPreferenceàGeneralàWorkspaceàText file encoding都改成UTF-8 2.WindowàPreferenceàGeneralàEdito ...
随机推荐
- python selenium 使用htmlunit 执行测试。非图形界面浏览器。
其实就是换个浏览器,只是这个浏览器没有图形界面而已. browser = webdriver.Chrome() 换成 browser = webdriver.Remote(desired_capabi ...
- Java动态代码模式
java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委 ...
- Mishka and Contest(模拟水题)
Mishka started participating in a programming contest. There are nn problems in the contest. Mishka' ...
- Phpcms V9导航循环下拉菜单的调用技巧
这个方法基于PC V9官方模版中的调用方法,然后利用后台的“Phpcms V9菜单是否显示设置”控制菜单是否显示出来. 先看看最后的效果: 调用方法: <div id="navbar& ...
- 20172333 2017-2018-2 《Java程序设计》第7周学习总结
20172333 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容 1.继承是创建新类的快捷方式之一,继承可以使用父类的所有方法及对象. 2.继承具有单向性,父类不 ...
- 针对“来用”团队项目之NABC分析
本项目特点之一:扩展性强 NABC分析: N(need):我们这个开发的这个软件主要是集娱乐软件和实用工具于一身的大容器,这里面有很多应用程序,针对不同用户需要,至少有一款应用程序能够满足用户的需要, ...
- oracle数据库之PL/SQL 流程控制语句
介绍 PL/SQL 的流程控制语句, 包括如下三类: 1.控制语句: IF 语句 2.循环语句: LOOP 语句, EXIT 语句 3.顺序语句: GOTO 语句, NULL 语句 一 条件语句 IF ...
- joomla 出现The file Cache Storage is not supported on this platform;
错误提示:The file Cache Storage is not supported on this platform:在这个平台上不支持文件缓存存储 出现这样的原因很简单,有两个文件夹不可写,这 ...
- Qt-excel文件操作方法
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt-excel文件操作方法 本文地址:http://techieliang.com/ ...
- dedecms给原模型添加新字段
1.进入dedecms后台 2.点击核心=>频道模型=>内容模型管理(在这里可以看到dedecms预设的模型设置) 3.选中我们需要的模型,点击更改,跳入以下页面 4.点击字段管理(可以看 ...