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 ...
随机推荐
- Ubuntu—安装并运行sublime
step1 到官网看看 https://www.sublimetext.com/3 step2 根据版本选择,我的是32位的 step3 ubuntu终端安装 (1)切换目录 -$ cd /opt ...
- Cassandra 类型转换限制
原文地址:http://stackoverflow.com/questions/31880381/cassandra-alter-column-type-which-types-are-compati ...
- LeetCode - 268. Missing Number - stable_sort应用实例 - ( C++ ) - 解题报告
1.题目大意 Given an array nums, write a function to move all 0's to the end of it while maintaining the ...
- jquery datatable 常用例子
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- 软件工程 作业part2 采访
Part 2 采访本课程往届同学(含外校和毕业生). 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下. 我采访的是2016级于淼 ...
- 3ds Max学习日记(七)
第7章讲的是多边形建模,实例略多,有十六个,再加上周日的怠惰感,只做了几个实例. 附上今日的劳动成果: 布料(创建一个平面,转换为可编辑多边形,然后调整顶点,连接一些边,添加网格平滑,转换为可 ...
- ci tp重定向
server { listen 80; #listen [::]:80; server_name tpblog.yeves.com; index index.html index.htm index. ...
- Windows API封装:LoadLibrary/FreeLibrary
LoadLibrary/LoadLibraryEx用来加载DLL到自己的进程空间,使用完用FreeLibrary释放,一般使用方式如下: HINSTANCE hInstRich = ::Load ...
- 抓取进程中包括其所有线程的iowait时间
perf事件是可以按照线程按照进程统计的呢,但是/proc/接口就不提供这样的功能 hon@station6:/proc/6288$ sudo perf stat -e sched:sched_swi ...
- Shell中sort-cut-wc详解
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...