Hadoop中mapred.child.java.opds参数意义

来源:互联网 发布:大富豪棋牌源码架设 编辑:程序博客网 时间:2024/06/05 00:00

最近发现Hadoop Job集群的load非常高,最后发现是mapred.child.Java.opts设置过大导致的,我们当初设置为-Xmx5120导致TaskTracker上内存资源耗尽,进而开始不断swap磁盘上数据,load升高

在执行一个Task的时候,首先会根据JobConf中设定的JVM参数写入一个taskjvm.sh文件中,然后调用Linux命令 bin/bash -c taskjvm.sh 来执行 task.

mapred.child.java.opts就是设定jvm的参数之一,在新版本中已经标准为过期,取而代之的是区分Map Task 和Reduce Task 的jvm opts , mapred.map.child.java.opts和mapred.reduce.child.java.opts(默认值为-Xmx200m)


当用户在不设置该值情况下,会以最大1G jvm heap size启动task,有可能导致OutOfMemory,所以最简单的做法就是设大参数,并且由于这个值不是final,所以用户可以在自己的mapred-site.xml中可以覆盖默认值

其实在构造JVM Args的过程中,是有另外一个admin参考可以覆盖用户端设置的

mapreduce.admin.map.child.java.opts   mapreduce.admin.reduce.child.java.opts


    在mapred-site.xml中加上如下配置:      <property>         <name>mapreduce.admin.map.child.java.opts</name>         <value>-Xmx1024m</value>      </property>      <property>          <name>mapreduce.admin.reduce.child.java.opts</name>          <value>-Xmx5120m</value>      </property>  

mapred.child.java.opts设置成多大比较合适:

这个参数是配置每个map或reduce使用的内存数量,默认是200m,一般情况下,该值设置为 总内存/并发数量(=核数)


mapred.map.child.java.opts和mapreduce.map.memeory.mb的区别:

mapreduce.map.memory.mb是向RM申请的内存资源大小,这些资源可用用于各种程序语言编写的程序, mapred.map.child.java.opts 一般只用于配置JVM参数