在 Ubuntu 中,当我运行 hadoop 示例时:
$bin/hadoop jar hadoop-examples-1.0.4.jar grep input output 'dfs[a-z.]+'
$echo $HADOOP_HEAPSIZE
2000
在日志中,我得到的错误是:
INFO mapred.JobClient: Task Id : attempt_201303251213_0012_m_000000_2, Status : FAILED Error: Java heap space 13/03/25 15:03:43 INFO mapred.JobClient: Task Id :attempt_201303251213_0012_m_000001_2, Status : FAILED Error: Java heap space13/03/25 15:04:28 INFO mapred.JobClient: Job Failed: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201303251213_0012_m_000000 java.io.IOException: Job failed! at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1265) at org.apache.hadoop.examples.Grep.run(Grep.java:69) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.hadoop.examples.Grep.main(Grep.java:93)
让我们知道问题是什么。
最佳答案
很明显,您已经用完了分配给 Java 的堆大小。所以你应该尝试增加它。
为此,您可以在执行 hadoop
命令之前执行以下操作:
export HADOOP_OPTS="-Xmx4096m"
或者,您可以通过在 mapred-site.xml
文件中添加以下永久设置来实现相同的目的,该文件位于 HADOOP_HOME/conf/
中:
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx4096m</value>
</property>
这会将您的 Java 堆空间设置为 4096 MB (4GB),如果可行,您甚至可以先尝试使用较低的值。如果那也不起作用,那么如果您的机器支持它,则增加它更多,如果不支持,则移至具有更多内存的机器并在那里尝试。由于堆空间仅仅意味着您没有足够的 RAM 可用于 Java。
更新:对于 Hadoop 2+,请改为在 mapreduce.map.java.opts 中进行更改。
关于hadoop - 错误 : Java heap space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609909/