我使用一个大文本文件中的每条记录对Lucene的索引执行搜索,然后根据需要对结果进行处理并写入输出。
我尝试使用Hadoop,将大的输入文本文件和预先创建的Lucene索引放到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
如何修复此错误?
1条答案
按热度按时间ut6juiuv1#
我认为你不应该调用java命令,而只应该给予你想作为Map器运行的完全限定的类名。如果Map器名为'javaconcept. HadoopConceptRunner',我想它会呕吐,因为类路径没有定义,这样类就找不到了;)
所以简而言之这样再试一次:
而且,我认为下面的做法不太可能奏效
你可以试试: