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

 <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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值