17

在 Ubuntu 中,当我运行 hadoop 示例时:

$bin/hadoop jar hadoop-examples-1.0.4.jar grep input output 'dfs[a-z.]+' 

$echo $HADOOP_HEAPSIZE
2000

在日志中,我收到以下错误:

信息 mapred.JobClient:任务 ID:attempt_201303251213_0012_m_000000_2,状态:失败 错误:Java 堆空间13/03/25 15:03:43 信息 mapred.JobClient:任务 ID:attempt_201303251213_0012_m_000001_2,状态:Java 堆空间/03/2 15:04:28 信息 mapred.JobClient:作业失败:失败的地图任务数超出了允许的限制。FailedCount:1。LastFailedTask:task_201303251213_0012_m_000000 java.io.IOException:作业失败!在 org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1265) 在 org.apache.hadoop.examples.Grep.run(Grep.java:69) 在 org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:65) 在 org.apache.hadoop.examples.Grep.main(Grep.java:93)

让我们知道是什么问题。

4

4 回答 4

45

显然,您已经用完了分配给 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中进行更改。

于 2013-03-25T09:45:42.583 回答
7
<property>
   <name>mapred.child.java.opts</name>
  <value>-Xmx4096m</value>
</property>

为我工作。

导出 HADOOP_OPTS="-Xmx4096m"

不工作

于 2013-10-17T23:08:26.260 回答
3

使用 Hadoop 2.5.0-cdh5.2.0,这对我来说改变了本地(顺序)java 进程的堆大小:

export HADOOP_HEAPSIZE=2900
hadoop jar analytics.jar .....

它起作用的原因是 /usr/lib/hadoop/libexec/hadoop-config.sh 有

# check envvars which might override default args
if [ "$HADOOP_HEAPSIZE" != "" ]; then
  #echo "run with heapsize $HADOOP_HEAPSIZE"
  JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m"
  #echo $JAVA_HEAP_MAX
fi
于 2015-07-31T21:58:07.470 回答
0

如果您在 mapred-site.xml 上添加属性

<property>
   <name>mapred.child.java.opts</name>
  <value>-Xmx2048m</value>
</property>

有时它会发生另一个因为它超过虚拟内存限制在这种情况下,您必须添加

<property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4.2</value>
</property>

在 yarn-site.xml 上

因为它默认的2.1G有时太小了。

于 2016-03-09T06:47:41.727 回答