Hadoop中的NoClassDefFoundError错误

时间:2013-05-30 06:05:36

标签: java hadoop runtime-error noclassdeffounderror

因此,经过SO上的许多帖子并修改了一些java基础知识后,我仍然会收到此错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/io/Writable
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2451)
at java.lang.Class.getMethod0(Class.java:2694)
at java.lang.Class.getMethod(Class.java:1622)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)

我知道Java中java.lang.NoClassDefFoundErrorClassNotFoundException之间的区别,并查看了通常导致它的原因。简而言之,这是因为某些类在运行时期间对程序不可用,但在编译时可用。因此我没有编译时错误。

我添加了两个类路径,一个到commons-logging-1.1.3.jar,另一个到hadoop-core.*jar。 我非常确信类路径是正确的。

以下是我的计划中的导入

import java.io.*;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.SequenceFile.*;
import org.apache.hadoop.io.SequenceFile.Writer;
import org.apache.hadoop.io.*;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.*;

1 个答案:

答案 0 :(得分:2)

您需要使用给定here

之类的Java代码创建一个jar
$ mkdir my_classes 
$ javac -classpath $HADOOP_HOME/hadoop-$HADOOP_VERSION-core.jar -d my_classes <name of the main class> 
$ jar -cvf <name of the jar> -C my_classes .

以这种方式运行jar:

$HADOOP_HOME/bin/hadoop jar <name of the jar> <name of the main class> <arguments to the program>

有关jar命令的说明,请参阅hadoop的documentation page