所以通过很多帖子要去SO和修改一些Java基础知识后,我仍然得到这个错误NoClassDefFoundError的错误在Hadoop中
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.lang.NoClassDefFoundError
,并在Java中ClassNotFoundException
之间的差别,并通过什么平常看导致它。简而言之,这是因为某些类在运行时期间对程序不可用,但在编译期间可用。因此我没有编译时错误。
我已经添加了两个类路径,一个到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.*;
这个类是在hadoop-core jar中,你能写出你如何运行你的工作(包括classpath)吗? –
@CharlesMenguy我使用Ubuntu 12.04,这是编译它的命令行 javac -cp“/home/hduser/hadoop/hadoop-core-1.1.2.jar:/home/hduser/Documents/commons-logging-1.1 .3/commons-logging-1.1.3.jar“TSVtoSeq.java 要运行, java TSVtoSeq TrainingT1.tsv testOutput 2个参数传递给main,输入文件和输出文件 – SLearner
您是不是用'java设置类路径-cp $ JARS'当你运行你的程序? –