在hadoop上运行lucene搜索时出错

时间:2012-07-29 00:23:21

标签: hadoop lucene hadoop-streaming

首先,让我解释一下我想做什么:)。真的对这个hadoop事情感到头疼并且真的需要帮助,除了meeeee:)

我使用大文本文件中的每个记录来搜索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太新了,非常感谢您对我们社区的帮助!

1 个答案:

答案 0 :(得分:0)

我认为你不应该调用java命令,而只是给你想要作为mapper运行的完全限定的类名。如果映射器名为'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