Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ClassNotFoundException,在运行Hadoop的示例作业时_Hadoop - Fatal编程技术网

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

ClassNotFoundException,在运行Hadoop的示例作业时,hadoop,Hadoop,我已经在hadoop上做了一些小事情。它的设置和运行正常。现在我正在做一个单节点/独立集群。 我正在尝试运行上提到的示例作业 到目前为止,程序已正确编译,jar已创建,清单已成功添加。但是,当我尝试运行作业时,我得到了这个错误 Exception in thread "main" java.lang.ClassNotFoundException: org.myorg.WordCount at java.net.URLClassLoader$1.run(URLClassLoader.java:20

我已经在hadoop上做了一些小事情。它的设置和运行正常。现在我正在做一个单节点/独立集群。 我正在尝试运行上提到的示例作业

到目前为止,程序已正确编译,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)
我已经复制粘贴了链接中提到的完全相同的程序。但它给出了这个错误。这是我点击的命令行

[shantanu@shades1ld1 hadoop]$ bin/hadoop jar /home/shantanu/hadoop/src/examples/wordcount.jar org.myorg.WordCount /tmp/Hadoop_Jobs/ /tmp/Hadoop_Results

我已经阅读了许多文章,但找不到对此的解释,请帮助。

您确定
wordcount.jar
包含
org.myorg.wordcount
类吗


您没有修改包名吗?

我发现我需要将其添加到示例应用程序中,以使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);
我不确定这对于hadoop来说是否是新的,但是setJarByClass将告诉hadoop基于jar文件中包含的单个类使用整个jar。jar必须仍在类路径中。这是我运行的命令:

hadoop jar wordcount.jar org.myorg.WordCount /usr/$USER/wordcount/input /usr/$USER/wordcount/output
我之前使用以下命令将示例文件复制到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
其中输入/文件01:

Hello World Bye World
和输入/文件02:

Hello Hadoop Goodbye Hadoop

我贴了一份说明书,说明我能做些什么。

你能详细说明一下吗?我也是Java新手。作为更新,我删除了
包org.myorg语句。现在它是一个单一的类。它仍然在线程“main”java.lang.ClassNotFoundException:WordCount
中给出了异常。救命!!这就是问题所在。您不应该删除包名,或者在命令行中您应该在不删除包名的情况下引用。我已删除了
org.myorg.WordCount
,并将其设置为
WordCount
,仅删除了所有设置并创建了新设置。突然,一切都开始工作了。除了我没有在core-sites.xml中输入
hadoop.tmp.dir
之外,没有进行任何更改。我想这就是问题所在。你怎么认为?谢谢你的帮助。我也遇到了类似的问题,原因是我没有仔细地遵循说明,特别是决定不使用-d选项。啊!谢谢,值得更新hadoop wiki。我相信谷歌会为下一个家伙找到维基链接和答案。凌晨4:30,你救了我:D