您的位置:首页 > 运维架构

Hadoop参数设置中的关系疏理

2016-02-01 17:36 447 查看
I. 核心参数: map reduce.{map|reduce}.memory.mb

1. map reduce.{map|reduce}.memory.mb为Container即Hadoop允许为task分配的内存大小,mapreduce.{map|reduce}.java.opts为node manage为启动task初始化的JVM heap大小, 后者应该小于前者,因为我们还要我Java代码保留内存,一般为其75%

2. mapreduce.{map|reduce}.java.opts与mapreduce.{map|reduce}.child.java.opts为同一个参数,前者是Hadoop 2.x的参数名。其值设置过小则容易造成内存溢出,设置过大则意味着集群负载过大。其参数名对应关系如下:

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.child.java.opts
mapred.map.child.java.opts         mapreduce.map.java.opts
mapred.reduce.child.java.opts      mapreduce.reduce.java.opts


3. map reduce.{map|reduce}.memory.mb的大小在yarn.scheduler.minimum-allocation-mb与yarn.scheduler.maximum-allocation-mb之间。

yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb


单个容器可申请的最小与最大内存,应用在运行申请内存时不能超过最大值,小于最小值则分配最小值,从这个角度看,最小值有点想操作系统中的页。最小值还有另外一种用途,计算一个节点的最大container数目。

4. yarn.nodemanager.resource.memory-mb为nodemanage节点上可用的最大内存,上述yarn.scheduler.minimum-allocation-mb/yarn.scheduler.maximum-allocation-mb不应该超过此值,该值的默认大小是8G,即使计算机内存不足8G也会按着8G内存来使用。同时此数值用于计算container的数据,即:yarn.nodemanager.resource.memory-mb/yarn.scheduler.minimum-allocation-mb。

5. yarn.nodemanager.vmem-pmem-ratio虚拟内存率,即为task所用内存的倍数。

II.核心参数:mapreduce.map.java.opts

1. mapreduce.task.io.sort.mb应该为mapreduce.map.java.opts/2,同时,mapreduce.reduce.java.opts应该为mapreduce.map.java.opts的2倍。

2. mapreduce.reduce.shuffle.input.buffer.percent控制运行reduce任务的服务器上多少比例的内存用作缓存copy Map产生的属于本reduce处理的那部分数据的Buffer,默认为0.7,mapreduce.reduce.shuffle.parallelcopies控制shuffle过程的并行度,即同时从多少个Map中copy数据。如果这些map同时完成计算并进行copy,则需要满足mapreduce.reduce.shuffle.input.buffer.percent*mapreduce.reduce.shuffle.parallelcopies<1,否则报错。如果这些map不同时完成,超过1没有问题。

III.核心参数:mapreduce.task.io.sort.mb

此参数用于map端排序所用的内存buffer,最小为1M,可以根据实际情况调大,BUG-12005:最大硬性编码不超过2047M。要确定你所用集群所有节点可用内存有你所设置的数目。

mapreduce.task.io.sort.factor为map端merge小文件时,并发有多少stream即同时有多少文件可用于合并,越大则越能减少磁盘IO。排序数据的每个分区大小=io.sort.mb / io.sort.factor,增大此参数可以减少每个分区数据量。如果你发现你的job在map端所用时间多于reduce端,则需要增加map task 的数目并降低此参数设置,降低内存压力。增大此参数配置会增加集群内存压力。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: