ClassNotFoundException,同时运行Hadoop的示例作业

Sha*_*s88 2 hadoop

我已经在hadoop上开了一点东西.它设置正常,运行正常.现在我正在做一个单节点/独立集群.我正在尝试运行http://hadoop.apache.org/common/docs/r0.18.3/mapred_tutorial.html上提到的示例作业

到目前为止,程序已正确编译,jar已创建,清单已成功添加.但是当我尝试运行这个工作时,我得到了这个错误.

Exception in thread "main" java.lang.ClassNotFoundException: org.myorg.WordCount
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Run Code Online (Sandbox Code Playgroud)

我复制粘贴了链接中提到的完全相同的程序.但它给出了这个错误.这是我命中的命令行.

[shantanu@shades1ld1 hadoop]$ bin/hadoop jar /home/shantanu/hadoop/src/examples/wordcount.jar org.myorg.WordCount /tmp/Hadoop_Jobs/ /tmp/Hadoop_Results
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多文章,但无法找到解释,请帮忙.

Ted*_*eid 10

我发现我需要将它添加到示例应用程序中以获取hadoop以了解我的类文件所在的jar.

diff --git a/src/org/myorg/WordCount.java b/src/org/myorg/WordCount.java
index 912311a..8cc1b93 100644
--- a/src/org/myorg/WordCount.java
+++ b/src/org/myorg/WordCount.java
@@ -43,7 +43,8 @@ public class WordCount {
  public static void main(String[] args) throws Exception {
     Configuration conf = new Configuration();

     Job job = new Job(conf, "wordcount");
+    job.setJarByClass(WordCount.class);

     job.setOutputKeyClass(Text.class);
     job.setOutputValueClass(IntWritable.class);
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是新的Hadoop的或没有,但setJarByClass会告诉Hadoop的使用基于被包含在JAR文件中的单个类的整个罐子.jar必须仍然在你的类路径中.这是我运行的命令:

hadoop jar wordcount.jar org.myorg.WordCount /usr/$USER/wordcount/input /usr/$USER/wordcount/output
Run Code Online (Sandbox Code Playgroud)

我之前使用此命令将示例文件复制到HDFS中:

hadoop dfs -copyFromLocal input/file01 /usr/$USER/wordcount/input/file01 
hadoop dfs -copyFromLocal input/file02 /usr/$USER/wordcount/input/file02 
hadoop dfs -ls /usr/$USER/wordcount/input
Run Code Online (Sandbox Code Playgroud)

其中input/file01:

Hello World Bye World
Run Code Online (Sandbox Code Playgroud)

和输入/ file02:

Hello Hadoop Goodbye Hadoop
Run Code Online (Sandbox Code Playgroud)

我建立了一个github仓库,上面有关于我能够工作的说明.


KAR*_*ván 6

你确定wordcount.jar包含org.myorg.WordCount课程吗?

你没有修改包名吗?