您的位置:首页 > 编程语言 > Java开发

Hadoop运行Mapreduce作业时报错:java.lang.OutOfMemoryError: Java heap space

2014-07-23 17:27 696 查看
一、概述

当在Hadoop上运行Mapreduce作业来处理稍微大一点的数据量时,都会遇到报错:java.lang.OutOfMemoryError: Java heap space的问题。我现在用的是CDH4,是基于Cloudera Manager来安装的,所以配置文件都是默认的,没有手动改过配置。

二、问题原因

1、原始的Hadoop集群中的mapred-site.xml的配置值很小,202058436字节=192M

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


2、由于是基于Clousera Manager来安装的,所以所有的服务的都必须通过它来启动,这与apache hadoop很不一样。所有的配置也都要通过Cloudera manager来修改。我曾经尝试在安装目录下修改,然后启动服务,可是当启动服务之后,所有的配置又还原成原来的样子了,反正修改不成功,具体原因我目前还不知道。

三、解决办法

1、我通过Cloudera Manager管理界面来修改JVM参数,在每个节点的Tasktracker设置mapred.child.java.opts参数为3G内存,然后很着急的把Hadoop集群重启,接着马上把之前的作业再重提交上去,大概等了40分钟,那个JOB终于又报内存溢出了,让我很纠结,之后静下心来想一想,我自己打包的那个jar文件里又有三个配置文件core-site.xml,hdfs-site.xml,mapred-site.xml。在mapred-site.xml里的那个JVM参数并没有改过来,其实Hadoop运行时是以Client提交的配置信息为准的,集群的配置信息将会被覆盖掉。



最终把我自己打包的那个jar包里的mapred-site.xml里修改mapred.child.java.opts参数如下,然后重新放到集群上跑,大概只花7分钟就跑完了。

<property>
    <name>mapred.child.java.opts</name>
    <value> -Xmx3221225472</value>
  </property>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐