我一直在尝试在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
答案 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