在运行简单的mapreduce作业时获取错误“java.lang.OutOfMemoryError:Java堆空间”

时间:2013-01-13 14:53:10

标签: java hadoop garbage-collection jvm

我一直在尝试在RHEL 6中为wordcount运行一个简单的Mapreduce作业,但我一直都会遇到此错误。请帮忙。

13/01/13 19:59:01 INFO mapred.MapTask: io.sort.mb = 100
13/01/13 19:59:01 WARN mapred.LocalJobRunner: job_local_0001
java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:949)
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:674)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
13/01/13 19:59:02 INFO mapred.JobClient:  map 0% reduce 0%
13/01/13 19:59:02 INFO mapred.JobClient: Job complete: job_local_0001
13/01/13 19:59:02 INFO mapred.JobClient: Counters: 0

2 个答案:

答案 0 :(得分:5)

您可能需要为最大堆和最大perm空间增加一些JVM设置。

我建议在您的Hadoop作业运行时运行Visual VM,这样您就可以了解正在发生的事情。

你在运行多台服务器吗?也许你要求一台服务器做太多。

答案 1 :(得分:0)

您可以使用jstat -gcutil来监控JVM的内存使用情况。这将显示堆使用量增长的速度。

此外,您还可以启用GC日志记录,这是轻量级的,并且会为您实例化的每个JVM显示相同内容:

  

-XX:+ UnlockDiagnosticVMOptions -XX:+ LogVMOutput -XX:LogFile = jvm.log -XX:+ HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+ PrintGCTimeStamps -XX:+ PrintGCDetails -showversion