所以通過很多帖子要去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'當你運行你的程序? –