当我尝试在python中实现 hadoop mapreduce 程序时, mapreduce 在输入文件的大小较小时执行正常。如果我尝试为大小超过50mb的输入文件实现相同的 mapreduce 。我在 log 文件中收到以下错误。
FATAL [main] org.apache.hadoop.mapred.YarnChild:运行子项时出错: java.lang.OutOfMemoryError:Java堆空间at java.util.Arrays.copyOf(Arrays.java:3236)at org.apache.hadoop.io.Text.setCapacity(Text.java:266)at org.apache.hadoop.io.Text.append(Text.java:236)at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:243) 在org.apache.hadoop.util.LineReader.readLine(LineReader.java:174) 在 org.apache.hadoop.mapred.LineRecordReader.skipUtfByteOrderMark(LineRecordReader.java:206) 在 org.apache.hadoop.mapred.LineRecordReader.next(LineRecordReader.java:244) 在 org.apache.hadoop.mapred.LineRecordReader.next(LineRecordReader.java:47) 在 org.apache.hadoop.mapred.MapTask $ TrackedRecordReader.moveToNext(MapTask.java:199) 在 org.apache.hadoop.mapred.MapTask $ TrackedRecordReader.next(MapTask.java:185) 在org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:52)at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34) 在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453) 在org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)at org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:164)at at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:422)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
参考此stackoverflow question,我在mapred-site.xml
,
<property>
<name>mapreduce.map.memory.mb</name>
<value>1974</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>7896</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1580m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx6320m</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value> -Xmx524288000</value>
</property>
<property>
<name>mapred.job.shuffle.input.buffer.percent</name>
<value>0.20</value>
</property>
但在配置更改后,只执行映射,并且reducer不启动。
所以,我可以修改什么,为大型输入文件实现 mapreduce 以便在没有问题的情况下运行。