Hadoop堆分配

时间:2014-10-01 21:48:21

标签: java linux hadoop yarn

我遇到的问题是Hadoop 2.5.1没有增加我请求的堆空间增加。 Hadoop似乎不尊重mapred-site.xml文件中的mapred.child.java.opts属性。

在我的工作中,我正在做以下事情:

R = new int[height * width];
G = new int[height * width];
B = new int[height * width];

根据图像的大小,我通过工作崩溃说

引起:java.lang.OutOfMemoryError:Java堆空间

这是可以理解的。我需要增加堆空间,但出于某种原因,Hadoop并不想尊重mapred-site.xml文件中的更改。

我将此添加到我的mapred-site.xml并重新启动

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

如果没有工作,我将其添加到我的mapred-env.sh并重新启动

export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=4000

如果没有工作,我将其添加到我的yarn-env.sh并重新启动

JAVA_HEAP_MAX=-Xmx4000m

如果没有工作,我将其添加到我的yarn-env.sh并重新启动

YARN_HEAPSIZE=4000

如果没有工作,我将其添加到我的hadoop-env.sh并重新启动

export HADOOP_HEAPSIZE=4000
export HADOOP_NAMENODE_INIT_HEAPSIZE="3000"

我已经使用start / stop-dfs.sh start / stop-all.sh start / stop-yarn.sh重新启动了它们的组合。我重新启动了服务器,但我还没有看到改变有所作为。

我无法做我能做什么或者我能改变什么。

有没有办法可以从作业中确定堆大小,所以我可以尝试调试它?

2 个答案:

答案 0 :(得分:0)

你试过这个吗?:

export HADOOP_OPTS="-Xmx12072m" 

我发现你已经尝试过更改mapred-site.xml(这是我的另一个选择)。

如果先尝试使用较低的值并查看它是否有效,那该怎么办?

可能你没有足够的可用于Java的内存,而你正试图提供超出它的范围。如果是这种情况,那么您将需要移动到具有更多内存的计算机并尝试在那里。

祝你好运!

答案 1 :(得分:0)

我不知道实际的原始问题是什么,但显然这是我最终的配置问题。错误配置或导致该问题的冲突配置。我最终做的是抓住hadoop安装并从头开始。

我按照本指南中的伪分布式操作说明进行操作:

http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-common/SingleCluster.html

除了这些说明中给出的配置设置外,我还添加了以下内容。您可以在http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-common/ClusterSetup.html

中找到相关信息
<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx4096m</value>
</property>
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>4096</value>
 </property>

我没有减少阶段,所以我不必担心这些参数。

这项工作现在似乎已经完成。