2010-05-07 108 views
3

我是hadoop的新手。运行hadoop时出现Classnotfound异常

我有一个文件Wordcount.java是指hadoop.jar和斯坦福parser.jar是

我运行以下commnad

javac -classpath .:hadoop-0.20.1-core.jar:stanford-parser.jar -d ep WordCount.java 

jar cvf ep.jar -C ep . 

bin/hadoop jar ep.jar WordCount gutenburg gutenburg1 

执行我收到以下错误后:

lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.LexicalizedParser 

类是在斯坦福大学parser.jar是...

瓦在可能是可能的问题?

感谢

+0

此文件属于Standford Parser - http://javasearch.buggybread.com/home.php?keyword=edu.stanford.nlp.parser.lexparser。LexicalizedParser – 2016-02-15 21:41:14

回答

2

我认为你需要调用的Hadoop时也,而不只是编译器添加斯坦福解析器罐子。 (如果你看ep.jar,我想它只会有一个文件 - WordCount.class)

E.g.

bin/hadoop jar ep.jar WordCount -libjars stanford-parser.jar gutenburg gutenburg1 

See Map/Reduce Tutorial

+1

嗨,我试过你建议的命令,但我得到这个错误 异常在线程“main”java.lang.ClassNotFoundException:-libjars – vana 2010-05-07 03:10:08

+0

嗨,我用正确的地方更新了与libjars的职位。请再试一次! – mdma 2010-05-07 08:23:06

+0

我试过你发布的命令,得到这个错误 异常在线程“main”org.apache.hadoop.mapred.InvalidInputException:输入路径不存在:hdfs:// localhost:11111/user/hadoop/-libjars – vana 2010-05-08 07:01:54

0

另一种选择,因为-libjars你可以尝试似乎并不为你工作是一切打包成一个jar,即你的代码+的依赖关系到一个JAR。

这就是它在〜Hadoop-0.18.0之前必须完成的工作(在那里他们的某处修复了这个问题)。

使用ant(我在eclipse中使用ant)可以设置一个构建,解包依赖并将它们添加到目标构建项目。你可能可以自己破解这个,通过手动解开依赖jar并将内容添加到你的jar中。

即使我现在使用0.20.1,我仍然使用这种方法。它使命令行的工作更简单。

1

mdma处于正确的轨道,但您还需要您的作业驱动程序来实施工具。

1

我有同样的问题。我认为-libjars选项没有被程序识别的原因是因为你没有通过调用GenericOptionsParser.getRemainingArgs()来解析它。在Hadoop 0.21.0的WordCount.java示例中(在mapred/src/examples/org/apache/hadoop/examples /中),找到了这段代码,并在我的程序中执行相同的操作后,-libjars comma-separated-罐子是公认:

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
if (otherArgs.length != 2) { 
    System.err.println("Usage: wordcount <in> <out>"); 
    System.exit(2); 
} 

... 
FileInputFormat.addInputPath(job, new Path(otherArgs[0])); 
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); 
+0

我试过了,但它似乎不起作用 – Gavriel 2014-04-09 08:59:52

1

我刚刚发现,你可以简单地编辑$ HADOOP_HOME/conf目录/ hadoop-env.sh并添加JAR来HADOOP_CLASSPATH。 这可能是最简单和最有效的。

-1

@Kuro Kurosaka我下载了hadoop的源代码jar,打开它,得出了同样的结论。这是网上提供的WordCount示例缺少的必要代码。使用GenericOptionParser和-libjars参数修复了我嵌套的ClassNotFound异常,并且我的作业正在运行。