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

  一、概述

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

二、问题原因

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

 
    mapred.child.java.opts
     -Xmx202058436
  

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提交的配置信息为准的,集群的配置信息将会被覆盖掉。

Hadoop运行Mapreduce作业时报错:java.lang.OutOfMemoryError: Java heap space_第1张图片

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

 
    mapred.child.java.opts
     -Xmx3221225472
  

你可能感兴趣的:(storm,spark))