无法 运行 Wordcount JAR 文件

Not able to run Wordcount JAR file

hduser@ubuntu:~/Desktop$ hadoop jar wc.jar /usr/local/hadoop/input/sample.txt /usr/local/hadoop/output
Warning: $HADOOP_HOME is deprecated.

Exception in thread "main" java.lang.ClassNotFoundException: /usr/local/hadoop/input/sample/txt
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)

正在尝试 运行 使用 java 1.7 和 hadoop 1.2.1 的 wordcount 程序。

您已经告诉 hadoop 您的主要 class 是“/usr/local/hadoop/input/sample.txt”

 jar

Runs a jar file. Users can bundle their Map Reduce code in a jar file and execute it using this command.

Usage: hadoop jar <jar> [mainClass] args... 

您需要在 java 代码中使用它来设置 jar class 名称

job.setJarByClass(WordCount.class);

您没有遵循正确的语法。

hadoop jar jar_location main_class input_path output_path

假设主 class 名称是 "WordCount" 并且 wc.jar 位于您的 PWD 中:

hadoop jar wc.jar Wordcount /usr/local/hadoop/input/sample.txt /usr/local/hadoop/output

job.setJarByClass(WordCount.class);

Hector 提到的并不能解决问题。这只是一个模糊的猜测。我仍然得到原来的症状。请在发布前测试答案!

看到这条评论:Hadoop query regarding setJarByClass method of Job class

我会把引用的 link 粘贴在这里,以防它有一天消失:


嗨,这个电话,

job.setJarByClass

告诉 Hadoop 使用哪个 jar。但我们也告诉 Hadoop 使用哪个 jar 命令行,

hadoop jar your-jar 参数

为什么我们在这两个地方都需要这个?

谢谢,

马克

回答: 命令行中的jar可能只是提交map-reduce的jar 作业,而不是包含 Mapper 和 Reducer 的 jar 转移到不同的节点。

hadoop jar your-jar 真正做的是设置类路径和其他 相关环境,以及 运行 your-jar 中的主要方法。你可能有一个 包含真实映射器的类路径中的不同 map-reduce-jar 和 reducer 用于完成这项工作。

最良好的祝愿, 许立行