我是hadoop的新手。
我有一个文件Wordcount.java,它引用了hadoop.jar和stanford-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
该课程在stanford-parser.jar ...
可能出现什么问题?
由于
答案 0 :(得分:2)
我认为你还需要在调用hadoop时添加standford-parser jar,而不仅仅是编译器。 (如果你查看ep.jar,我想它里面只有一个文件 - WordCount.class)
E.g。
bin/hadoop jar ep.jar WordCount -libjars stanford-parser.jar gutenburg gutenburg1
答案 1 :(得分:1)
mdma在正确的轨道上,但您还需要您的工作驱动程序来实现工具。
答案 2 :(得分:1)
我遇到了同样的问题。我认为你的程序无法识别-libjars选项的原因是因为你没有通过调用GenericOptionsParser.getRemainingArgs()来解析它。在Hadoop 0.21.0的WordCount.java示例中(在mapred / src / examples / org / apache / hadoop / examples /中),找到了这段代码,在我的程序中执行相同操作后,-libjars comma-已分离的罐子被识别:
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]));
答案 3 :(得分:1)
我刚刚发现你可以简单地编辑$ HADOOP_HOME / conf / hadoop-env.sh并将你的JAR添加到HADOOP_CLASSPATH。 这可能是最简单和最有效的。
答案 4 :(得分:0)
你可以尝试的另一个选项,因为-libjars似乎不适合你,就是将所有内容打包到一个jar中,即你的代码+依赖于一个jar。
这就是在~Hadoop-0.18.0之前必须完成的事情(在那里他们修复了这个)。
使用ant(我在eclipse中使用ant),您可以设置一个解包依赖项的构建,并将它们添加到目标构建项目中。你可以自己解决这个问题,方法是手动解压缩依赖jar并将内容添加到你的jar中。
即使我现在使用0.20.1,我仍然使用这种方法。它使得从命令行开始的工作更简单。
答案 5 :(得分:-1)
@Kuro Kurosaka我下载了hadoop的源jar,打开它,得出了同样的结论。这是Web上可用的WordCount示例中缺少的必要代码。使用GenericOptionParser和-libjars参数修复了我的嵌套ClassNotFound异常并且我的作业正在运行。