无法 运行 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 用于完成这项工作。
最良好的祝愿,
许立行
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 用于完成这项工作。
最良好的祝愿, 许立行