2012-07-29 42 views
0

首先,讓我解釋一下我正在嘗試做什麼:)。真的讓這個hadoop事情頭痛,真的需要幫助,節省meeeee :)在hadoop上運行lucene搜索出錯

我使用大文本文件中的每個記錄執行搜索Lucene的索引,然後按結果,因爲我想和寫入輸出。

所以,我想通過將大輸入文本文件和預先創建的lucene索引放在hadoop的文件系統上來使用hadoop。然後,我更改了我的java程序,它執行文件處理(讀取文件記錄,在lucene上進行搜索,寫入輸出)以從Hadoop文件系統讀取記錄,並在內存中創建lucene索引。我揭開序幕的Hadoop作業的命令是象下面這樣:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.3.jar 
      -libjars lucene-core-3.6.0.jar,hadoop-core-1.0.3.jar,concept.jar 
      -mapper "java concept.HadoopConceptRunner" 
      -input myBigInputFile 
      -output myOutput 
      -reducer NONE 

注意,「concept.jar」包含concept.HadoopConceptRunner類,這是我寫的:)。

我頭疼的是,我不能讓這個Hadoop的作業運行正確=。=」我有例外像下面。而我無法找到任何其他有意義,可以幫助我解決這個問題。

Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. 

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 

我用Hadoop太新了,真正從我們對這個社會感謝您的幫助!

+0

BTW:什麼爲t他需要用作Mapper的java類嗎?目前我的概念.HadoopConceptRunner類不擴展或覆蓋任何hadoop類的方法。這是一個可能的問題嗎?我不確定這是一個問題,因爲我使用hadoop的awk腳本,它運行得很好...... – trillions 2012-07-29 00:27:09

回答

0

我想你不應該調用java命令。可是,只給你想要作爲映射器運行的完全限定的類名。如果映射器叫做「Java的concept.HadoopConceptRunner」,我想這將BARF因爲這樣的類就不會被發現的路徑並不確定;)

因此,在短期是這樣再試一次:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.3.jar 
     -libjars lucene-core-3.6.0.jar,hadoop-core-1.0.3.jar,concept.jar 
     -mapper "concept.HadoopConceptRunner" 
     -input myBigInputFile 
     -output myOutput 
     -reducer NONE 

另外,我覺得以下是不大可能奏效

-reducer NONE 

你可以嘗試,而不是:

-jobconf mapred.reduce.tasks=0