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 ...
随机推荐
- Dask教程
Dask 介绍 Dask是一款用于分析计算的灵活并行计算库. Dask由两部分组成: 针对计算优化的动态任务调度.这与Airflow,Luigi,Celery或Make类似,但针对交互式计算工作负载进 ...
- Docker容器的搭建
Docker容器的搭建 一.先从Docker Hub上面拉取一个基础镜像 命令:docker pull ubuntu 命令说明:pull:拉取镜像的命令,ubuntu:拉取镜像的名称 扩展命令: 命令 ...
- SpringCloud IDEA 教学 (一) Eureka的简介与服务注册中心的建立
写在开头 SpringCloud进来成为业界排名靠前的微服务框架,最核心功能就是搭建微服务,并在此基础上衍生出一系列功能,如断路器(Hystrix).断路监控.管理配置.Zuul.OAuth2等功能. ...
- php 安全方面面试题
1 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率.b. 选择合适的表字段数据类型和存储 ...
- 第四课——MFC应用程序框架
一.MFC应用程序类型 上篇文章的彩蛋:可通过使用MFC应用程序向导(MFC AppWizard)的功能来创建所需要的应用程序,这意味着不需要输入任何代码.MFC除了应用程序向导,还对应用程序项目有着 ...
- 2017-2018-2 20172314 『Java程序设计』课程 结对编程练习_四则运算
相关过程截图 截图为我负责的部分关于计算的测试 关键代码解释 根据代码中的部分解释,这部分代码实现了结果的整数和分数的输出,如果算出的结果为一个真分数,就输出真分数的形式,如果结果为整数,就输出整数形 ...
- Java语法基础课后作业
1.动手动脑 运行它EnumTest.java,分析运行结果 s和t分别引用的是SMALL和LARGE,枚举类型不是原始数据类型,s和u的赋值方式不同,但结果一样,列出它的所有值:SMALL,MEDI ...
- bootstrap控件点击之后没有反应的原因
引用的jquery.js文件要放到bootstrap.js的前面 jquery.js文件版本太低. 这些问题可以通过firebug或者谷歌调试器发现. 问题很简单,简单记录下,以免以后遗忘.
- Linux中实现在系统启动时自动加载模块
下面是以前学习Linux时写的,后来仔细研究rc.sysinit后发现,只需要修改下列地方就可以了,不必这么麻烦的: rc.sysinit中有这样的一段代码: # Load other user-de ...
- WPF 资源应用
对资源的应用,有好多方法,以下是一些应用,可以参考 1.静态资源: 2.动态资源: 3.项目面板中的资源: 4.图片.声音等资源