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 命令,而只提供要作为映射器运行的完全限定类名。如果映射器称为“java concept.HadoopConceptRunner”,我想它会出错,因为未定义类路径,因此找不到该类;)

所以简而言之,再试一次:

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 回答