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 ...
随机推荐
- Docker容器的搭建
Docker容器的搭建 一.先从Docker Hub上面拉取一个基础镜像 命令:docker pull ubuntu 命令说明:pull:拉取镜像的命令,ubuntu:拉取镜像的名称 扩展命令: 命令 ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- Spring MVC 整合Swagger的一些问题总结
在做Spring MVC 整合swagger的时候,遇到的两个问题: 第一个问题 在网上找了一些Spring MVC 和Swagger的例子,照着一步步的配置,结果,到最后,项目都起来了,没有任何问题 ...
- Calculator 2
github地址:https://github.com/YooRarely/object-oriented.git 新增: 计算类(拥有计算功能) 采用符号优先级计算方法 对符号不匹配的如 -2 ,自 ...
- LintCode-50.数组剔除元素后的乘积
数组剔除元素后的乘积 给定一个整数数组A. 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法. 样例 给出A=[1 ...
- C#,Winform 文件的导入导出 File
1.导入 导入对话框:OpenFileDialog private void sbtnsb_Click(object sender, EventArgs e) { try { OpenFileDial ...
- 工具函数:cookie的添加、获取、删除
cookie是浏览器存储的命名数据,作用是保存用户的信息,这样我们就可以用这些信息来做一些事了,但是cookie容量很小,只有4kb. 下面是我总结的cookie的添加.获取.删除的函数: cooki ...
- mysql授权远程连接
查一下你的MYSQL用户表里, 是否允许远程连接 1.授权 mysql>grant all privileges on *.* to 'root'@'%' identified by ...
- dubbo+zk+maven的那点事
1.服务端建议使用xml方式进行服务暴露,可读性更高: 2.消费端不能直接引入service模块,而是通过引入service-api模块来使用服务端的服务,因为这不是单体应用: 题外话:dubbo是一 ...
- cookie的路径决定服务器在发送请求时候 是否决定发送 当路径匹配时候 则发送给服务器(默认发送原则)
1.cookie路径默认为当前访问地址的上一级路径 2.当前访问地址的路径包含了cookie的路径 则发送给访问的地址 3.路径决定cookie发送与否 4.发送包含在当前路径里面的cookie