0

大きなテキスト ファイル内の各レコードを使用して、Lucene のインデックスで検索を実行し、必要に応じて結果をマッサージして、出力に書き込みます。

大きな入力テキスト ファイルと作成済みの Lucene インデックスを Hadoop のファイル システムに配置して、Hadoop を使用しようとしています。次に、ファイル処理 (ファイル レコードの読み取り、Lucene での検索、出力の書き込み) を行う Java プログラムを変更して、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

このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

0

javaコマンドを呼び出すのではなく、マッパーとして実行する完全修飾クラス名のみを指定する必要があると思います。マッパーが「javaconcept.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
于 2012-08-03T08:30:05.067 に答える