Yarn下Mapreduce的内存参数理解&xml参数配置

参考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/

Container是什么?

Container就是一个yarn的java进程,在Mapreduce中的AM,MapTask,ReduceTask都作为Container在Yarn的框架上执行,你可以在RM的网页上【8088端口】看到Container的状态

基础

Yarn的ResourceManger(简称RM)通过逻辑上的队列分配内存,CPU等资源给application,默认情况下RM允许最大AM申请Container资源为8192MB(“yarn.scheduler.maximum-allocation-mb“),默认情况下的最小分配资源为1024M(“yarn.scheduler.minimum-allocation-mb“),AM只能以增量(”yarn.scheduler.minimum-allocation-mb“)和不会超过(“yarn.scheduler.maximum-allocation-mb“)的值去向RM申请资源,AM负责将(“mapreduce.map.memory.mb“)和(“mapreduce.reduce.memory.mb“)的值规整到能被(“yarn.scheduler.minimum-allocation-mb“)整除,RM会拒绝申请内存超过8192MB和不能被1024MB整除的资源请求【内存增量】。

本文基于Hadoop2.6;下面提到的配置项最好都要设置以覆盖默认值,以便调优。

1、yarn-site.xml 设置

yarn进行资源管理的时候:以contain作为最小单位来进行资源分配的。
事实上Hadoop所有设置都可以写在同一个xml中,但是为了自己查看方便,模块化,所以分开写。
yarn-site.xml主要设置yarn的基本配置,以yarn开头的配置项。修改后必须重启集群生效。
mapred-site.xml主要设置mapreduxe任务的配置项;这个文件修改后不需重启集群。

1.1 NM设置(NodeManager)

NM的内存资源配置,主要是通过下面两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置) :
yarn.nodemanager.resource.memory-mb 默认8GB
yarn.nodemanager.vmem-pmem-ratio 默认2.1
说明:第一个参数:该结点向操作系统申请的内存总量,RM中的两个值不能超过此值。此数值可以用于计算container最大数目,即:用此值除以RM中的最小容器内存。第二个:虚拟内存率,是占task所用内存的百分比,默认值为2.1倍。如报错虚拟内存溢出,则提高该值。
注意:第一个参数默认大小是8G,即使计算机内存不足8G也会按着8G内存来使用,所有计算机内存小于8GB应该调低这个值。

1.2 RM设置(ResourceManager)

RM的内存资源配置,主要是通过下面的两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置):
yarn.scheduler.minimum-allocation-mb 默认1GB
yarn.scheduler.maximum-allocation-mb 默认8GB
说明:单个容器可申请的最小与最大内存,应用在运行申请内存时不能超过最大值,应用申请小于最小值则会分配最小值,从这个角度看,最小值有点像操作系统中的页。最小值还有另外一种用途,用来计算一个节点的最大container数目。注:这两个值一经设定不能动态改变(此处所说的动态改变是指需要重启集群生效)。

2、mapred-site.xml 设置见文后附录

2.1 AM设置(ApplicationManager)

AM内存配置相关参数,此处以MapReduce为例进行说明(这两个值是AM特性,应在mapred-site.xml中配置),如下:
mapreduce.map.memory.mb 默认
mapreduce.reduce.memory.mb 默认
说明:单个Map/Reduce task 申请的内存大小,其值应该在RM中的最大和最小container值之间。如果没有配置则通过如下简单公式获得:
max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))
一般reduce内存大小应该是map的2倍。注:这两个值可以在应用启动时通过参数改变,可以动态调整;

2.2 AM JVM设置

AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以通过,如下选项配置:
mapreduce.map.java.opts 默认
mapreduce.reduce.java.opts 默认
说明:这两个参主要是为需要运行JVM程序(java、scala等)准备的,通过这两个设置可以向JVM中传递参数的,与内存有关的是,-Xmx,-Xms等选项。此数值大小,应该在AM中的map.mb和reduce.mb之间。

2.3总结

AM为Map/Reduce task向RM申请资源,RM按照mini和max、资源增量的值为task分配一个固定大小的container供task使用。RM可以分配下去的资源总量受到NM配置的值限制。

3、注意:

在hadoop2及以上版本中,map和reduce task 是运行在container中的。mapreduce.{map|reduce}.memory.mb 被yarn用来设置container的内存大小。如果container的内存超限,会被yarn杀死。在container中,为了执行map和reduce task,yarn会在contaner中启动一个jvm来执行task任务。mapreduce.{map|reduce}.java.opts用来设置container启动的jvm相关参数,通过设置Xmx来设置map 或者reduce task的最大堆内存。
理论上,{map|reduce}.java.opts设置的最大堆内存要比{map|reduce}.memory.mb小。一般设置为一般设置为0.75倍的memory.mb即可;因为在yarn container这种模式下,JVM进程跑在container中,需要为java code等非JVM的内存使用预留些空间。
运行中的设置方法例如:xml中也可设置
hadoop jar -Dmapreduce.reduce.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx3276

4、常见内存溢出报错&解决

默认情况下,yarn.nodemanager.vmem-pmem-ratio被设置为2.1,这意味着,每个map或者task任务只能使用2.1倍(”mapreduce.reduce.memory.mb”) or (“mapreduce.map.memory.mb”) 大小的虚拟内存,如果使用的量超出则会被nm杀掉。
例如:日志中常见报错:
1、Container xxx is running beyond physical memory limits
2、java heap space
3、Error: GC overhead limit exceeded

报错1:Current usage: 1.1gb of 2.0gb physical memory used; 4.6gb of 
  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值