嗨,当我试图在hadoop中执行mapreduce程序时,我在集群中遇到了以下错误。对于文件大小较小的数据,这段代码可以正常工作,但是hadoop抛出以下错误,我在集群中有足够的位置。我尝试将reducer的堆空间从6gb增加到10gb,但仍然失败了。使用的标签
请帮我解决这个问题
错误:org.apache.hadoop.mapreduce.task.reduce.shuffle$shuffleerror:org.apache.hadoop.mapreduce.task.reduce.shuffle.run(shuffle)的fetcher#7中的shuffle错误。java:134)在org.apache.hadoop.mapred.reducetask.run(reducetask。java:376)在org.apache.hadoop.mapred.yarnchild$2.run(yarnchild。java:163)在javax.security.auth.subject.doas(主题)中的java.security.accesscontroller.doprivileged(本机方法)。java:415)在org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation。java:1671)在org.apache.hadoop.mapred.yarnchild.main(yarnchild。java:158)原因:java.lang.outofmemoryerror:处的java堆空间org.apache.hadoop.io.boundedbytearrayoutputstream。(boundedbytearrayoutputstream。java:56)在org.apache.hadoop.io.boundedbytearrayoutputstream。java:46)在org.apache.hadoop.mapreduce.task.reduce.inmemorymapoutput.(inmemorymapoutput。java:63)在org.apache.hadoop.mapreduce.task.reduce.mergemanagerimpl.unconditionalreserve(mergemanagerimpl。java:305)在org.apache.hadoop.mapreduce.task.reduce.mergemanagerimpl.reserve(mergemanagerimpl。java:295)在org.apache.hadoop.mapreduce.task.reduce.fetcher.copymapoutput(fetcher。java:514)在org.apache.hadoop.mapreduce.task.reduce.fetcher.copyfromhost(fetcher。java:336)在org.apache.hadoop.mapreduce.task.reduce.fetcher.run(fetcher。java:193)
2条答案
按热度按时间flmtquvp1#
使用
mapreduce.[mapper/reducer].java.pts
参数。建议使用约80-85%的reducer/mapper内存。注意,对于第一个,没有直接的hadoop2等价物;源代码中的建议是使用另外两个。mapred.child.java.opts仍受支持(但会被其他两个更具体的设置(如果存在)覆盖)。tkqqtvp12#
如果您提到map reduce属性,那么您的问题会更清楚,因为它将为shuffle阶段的内存计算提供一些细节。
memorylimit=runtime.getruntime().maxmemory()*(mapreduce.reduce.shuffle.input.buffer.percent)。
mapreduce.reduce.shuffle.input.buffer.percent的default值是0.9,您可以将其值减小到0.2,使memorylimit小于1。因此,可以包括以下属性:
有关更多说明,请参阅:https://issues.apache.org/jira/browse/mapreduce-6447