Hadoop MapReduce ShuffleError: error in shuffle

参数:mapreduce.reduce.shuffle.input.buffer.percent   

默认值:0.70   

含义:The percentage of memory to be allocated from the maximum heap size to storing map outputs during the shuffle.

参数:mapreduce.reduce.shuffle.parallelcopies   

默认值:5   

含义:The default number of parallel transfers run by reduce during the copy(shuffle) phase.


上面两个参数表示了hadoop从map向reduce传输数据shuffle的时候所用的内存buffer限制,第一个参数

表示每个shuffle进程占用的memery比例。第二个参数表示最多有几个进程,两个参数的乘积不能最好

不要大于1,不然当同时有5个shuffle时,会占用太多内存,导致报异常。注意这里说的内存值得是java

指定的-Xmx的最大堆内存。


如果修改完上面两个参数还是报错的话,需要进行如下修改:

Hadoop伪分布式模式运行时,运行一个Job报上面错误,原因是由于Hadoop的最大对内存过小,

hadoop默认分配的最大堆内存大小为1000MB,有时候跑的job所需的内存可能比这个数值要大

很多,这是修改运行是的最大大小并不是mapreduce.map.java.opts或者mapreduce.reduce.java.opts

参数的值,他们是在分布式环境下的配置参数。

此时我们需要修改的代码位于hadoop-env.sh文件中(该文件位于HADOOP_HOME_DIR/etc/hadoop

目录下),在该文件中搜索“HADOOP_HEAPSIZE”参数,直接将该行的注释去掉,末尾增加你

需要设置的内存大小,单位默认为MB,比如你想设置最大对内存为4GB,你需要填写4096,

修改完成该行的内容为:

export HADOOP_HEAPSIZE=4096

修改完之后,重启hadoop服务,所有的-Xmx=1000都变为了-Xmx=4096:

 4271 ?        Sl     0:14 /usr/local/jdk/bin/java -Dproc_namenode -Xmx4096m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/hadoop/logs -
 4431 ?        Sl     0:11 /usr/local/jdk/bin/java -Dproc_datanode -Xmx4096m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/hadoop/logs -
 4660 ?        Sl     0:12 /usr/local/jdk/bin/java -Dproc_secondarynamenode -Xmx4096m -Djava.net.preferIPv4St

这是再启动job,所使用的-Xmx参数也变为了:4096m

/usr/local/jdk/bin/java -Xmx4096m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值