NoClassDefFoundError Erreur dans Hadoop

Donc, après avoir parcouru de nombreux posts sur DONC et la révision de certaines java notions de base, j'obtiens toujours cette erreur

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)

Je sais faire la différence entre java.lang.NoClassDefFoundError et ClassNotFoundException en Java, et ont regardé à travers ce qui provoque généralement il. En un mot, c'est parce qu'une classe n'est pas disponible pour le programme lors de l'Exécution, mais est disponible lors de la Compilation. Donc je n'ai pas le temps de compilation des erreurs.

J'ai ajouté deux chemins de classe, l'un à commons-logging-1.1.3.jar et l'autre à la hadoop-core.*jar.
Je suis assez confiant sur le fait que les chemins de classe sont corrects.

Voici les importations dans mon Programme

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.*;
  • Cette classe est dans hadoop-core jar, vous pouvez écrire exactement la façon dont vous exécutez votre travail (y compris le chemin de la classe)?
  • J'utilise ubuntu 12.04, c'est la ligne de commande de compilation 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 À Terme, java TSVtoSeq TrainingT1.tsv testOutput 2 arguments sont passés à la main, le Fichier d'Entrée et de Sortie de fichier
  • N'êtes-vous pas le réglage de votre classpath avec java -cp $JARS lorsque vous exécutez votre programme?
  • Donc, j'ai ajouté le classpath lors de l'exécution du programme(Est-il nécessaire?), J'obtiens toujours la même exception levée. Toutefois, la classe d'être souligné est "org/apache/commons/configuration/Configuration" au lieu de "org/apache/hadoop/io/Écriture"
  • c'est becoz il y a beaucoup de pots hadoop est dépendante (peut être trouvé dans HADOOP_HOME/lib) et lors de l'exécution de plusieurs de ces visées. Soit continuer à le faire manuel procès-n-erreur jusqu'à u l'obtenir en cours d'exécution ou ajouter tous les pots dans le classpath pendant que vous exécutez. Un standard est de créer un jar de votre code et l'exécuter à l'aide bin/hadoop script comme expliqué dans ma réponse ci-dessous.
  • Vous devriez regarder @TejasP 's solution qui est probablement le plus approprié pour votre cas.

InformationsquelleAutor SLearner | 2013-05-30