2013-05-01 104 views
0

我剛剛開始使用linux/java/hadoop/EMR。用hadoop上的java運行初級mapreduce作業

我正在關注this整齊的書。

分配是運行:

bin/hadoop jar hadoop-cookbook-chapter1.jar chapter1.WordCount input output 

這是響應我得:

[email protected]:/usr/share/hadoop$ sudo hadoop jar hadoop-cookbook-chapter1.jar chapter1.WordCount input output 
13/05/01 01:01:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
13/05/01 01:01:08 INFO input.FileInputFormat: Total input paths to process : 1 
13/05/01 01:01:08 WARN snappy.LoadSnappy: Snappy native library not loaded 
13/05/01 01:01:09 INFO mapred.JobClient: Running job: job_local_0001 
13/05/01 01:01:09 INFO util.ProcessTree: setsid exited with exit code 0 
13/05/01 01:01:09 INFO mapred.Task: Using ResourceCalculatorPlugin : [email protected] 
13/05/01 01:01:09 INFO mapred.MapTask: io.sort.mb = 100 
13/05/01 01:01:09 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/05/01 01:01:10 INFO mapred.JobClient: map 0% reduce 0% 
13/05/01 01:01:10 INFO mapred.JobClient: Job complete: job_local_0001 
13/05/01 01:01:10 INFO mapred.JobClient: Counters: 0 

坦率地說,因爲我幾乎沒有java的背景下,我甚至不知道在哪裏開始調試。

對於如何解決此問題的任何指導,我將不勝感激。

更新

以下greedybuddha的意見後,我得到:

[email protected]:/usr/share/hadoop$ sudo hadoop jar hadoop-cookbook-chapter1.jar chapter1.WordCount -Dmapred.child.java.opts=-Xmx1G input output 
[sudo] password for alex: 
13/05/01 11:03:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
13/05/01 11:03:54 INFO input.FileInputFormat: Total input paths to process : 1 
13/05/01 11:03:54 WARN snappy.LoadSnappy: Snappy native library not loaded 
13/05/01 11:03:54 INFO mapred.JobClient: Running job: job_local_0001 
13/05/01 11:03:54 INFO util.ProcessTree: setsid exited with exit code 0 
13/05/01 11:03:54 INFO mapred.Task: Using ResourceCalculatorPlugin : [email protected] 
13/05/01 11:03:54 INFO mapred.MapTask: io.sort.mb = 100 
13/05/01 11:03:54 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/05/01 11:03:55 INFO mapred.JobClient: map 0% reduce 0% 
13/05/01 11:03:55 INFO mapred.JobClient: Job complete: job_local_0001 
13/05/01 11:03:55 INFO mapred.JobClient: Counters: 0 
+0

查看http://stackoverflow.com/questions/8464048/out-of-memory-error-in-hadoop瞭解問題的不同方法。 – harpun 2013-05-01 16:58:35

+0

@harpun我需要重新啓動嗎? – 2013-05-01 17:17:19

+0

@harpun謝謝你!我試過了,但仍然存在同樣的問題。一個用戶說重新啓動守護進程,我該怎麼做? – 2013-05-01 17:22:20

回答

2

Java需要一定的內存來運行程序。當一個程序使用太多時,它會拋出你所遇到的錯誤。解決方案是告訴java爲程序分配更多的內存。在這種情況下,你應該能夠告訴hadoop爲你分配內存。嘗試以下操作。

bin/hadoop jar hadoop-cookbook-chapter1.jar chapter1.WordCount -Dmapred.child.java.opts=-Xmx1G input output 

選項-Xmx1G表示允許高達1千兆字節。

這個其他的stackoverflow問題也非常相似。 out of Memory Error in Hadoop

+0

非常感謝您的幫助。現在我得到這個異常「:線程」main「中的異常java.lang.ClassNotFoundException:-Dmapred.child.java.opts = -Xmx1G \t at java.net.URLClassLoader $ 1.run(URLClassLoader.java:366) \t在java.net.URLClassLoader的$ 1.run(URLClassLoader.java:355) \t在java.security.AccessController.doPrivileged(本機方法) \t在java.net.URLClassLoader.findClass(URLClassLoader.java:354) \t在java.lang.ClassLoader.loadClass(ClassLoader.java:423) \t在java.lang.ClassLoader.loadClass(ClassLoader.java:356) \t在java.lang.Class.forName0(本機方法) \t在java.lang.Class.forName(Class.java: – 2013-05-01 16:47:26

+0

道歉,-Doption.to.set = somevalue,應在程序名稱後面運行。我更新了上面的答案以反映這一點。 – greedybuddha 2013-05-01 16:58:39

+0

謝謝。我正在收到一個新的JAVA HEAP SPACE錯誤。請看更新後的問題 – 2013-05-01 17:05:45