本帖最后由 xioaxu790 于 2014-8-6 22:12 编辑
问题导读
1、一般什么情况下,报java.lang.OutOfMemoryError: Java heap space问题?
2、该怎么解决?
一、概述
当在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>
复制代码
本文转载自:http://blog.csdn.net/panguoyuan/article/details/38067269
|