java.lang.NoClassDefFoundError dans Hadoop Bases' Programme MapReduce
Je suis en train de Hadoop de Base de MapReduce Programme dont le tutoriel est sur http://java.dzone.com/articles/hadoop-basics-creating
Le code Complet de la classe(le code est présent sur le net sur l'url ci-dessus)
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class Dictionary {
public static class WordMapper extends Mapper<Text, Text, Text, Text> {
private Text word = new Text();
public void map(Text key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString(), ",");
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(key, word);
}
}
}
public static class AllTranslationsReducer extends Reducer<Text, Text, Text, Text> {
private Text result = new Text();
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
String translations = "";
for (Text val : values) {
translations += "|" + val.toString();
}
result.set(translations);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
System.out.println("welcome to Java 1");
Configuration conf = new Configuration();
System.out.println("welcome to Java 2");
Job job = new Job(conf, "dictionary");
job.setJarByClass(Dictionary.class);
job.setMapperClass(WordMapper.class);
job.setReducerClass(AllTranslationsReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setInputFormatClass(KeyValueTextInputFormat.class);
FileInputFormat.addInputPath(job, new Path("/tmp/hadoop-cscarioni/dfs/name/file"));
FileOutputFormat.setOutputPath(job, new Path("output"));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Mais après l'exécution dans eclipse; j'obtiens le message d'erreur,
welcome to Java 1
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:73)
at Dictionary.main(Dictionary.java:43)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
Avez-vous référencé apache commons logging dans votre projet?
J'ai cette erreur quand j'oublie de lancement de fils de services. Juste sbin/start-yarn.sh avant d'exécuter le travail.
J'ai cette erreur quand j'oublie de lancement de fils de services. Juste sbin/start-yarn.sh avant d'exécuter le travail.
OriginalL'auteur Shirish Herwade | 2012-12-08
Vous devez vous connecter pour publier un commentaire.
NoClassDefFoundError arrive quand une classe n'est pas visible au moment de l'exécution, mais a été au moment de la compilation. Ce qui peut être lié à des fichiers JAR, parce que tous les fichiers de classe n'ont pas été inclus.
Alors essayez d'ajouter dans votre chemin de classe commons-logging-1.1.1 jar que vous pouvez obtenir de http://commons.apache.org/logging/download_logging.cgi
Pas exactement vrai. Le fichier nommé est trouvé dans le chemin de classe au moment de l'exécution, mais pour une raison quelconque (il y a environ une douzaine), il n'a pas pu être chargé.
OriginalL'auteur
Veuillez noter que l'exception est NoClassDefFoundError au lieu de ClassNotFoundException.
Note : NoClassDefFoundError est levée lorsqu'une classe n'est pas visible au moment de l'exécution, mais a été visible au moment de la compilation. Cela peut être quelque chose qui peut arriver dans la distribution ou la production de fichiers JAR, où pas tous les fichiers de classe ont été inclus.
De fixer : Veuillez vérifier les différences dans votre temps de construction et d'exécution classpath.
NoClassDefFoundError et ClassNotFoundException sont différents.
l'une est une Erreur, et l'autre est une Exception.
NoClassDefFoundError: découle de la JVM avoir de problèmes à trouver une classe, il s'attendait à trouver. Un programme de travail au moment de la compilation ne peut pas s'exécuter parce que des fichiers de classe n'est pas trouvé.
ClassNotFoundException: Cette exception indique que la classe n'a pas été trouvé sur le chemin de la classe j'.e nous essayons de charge de la définition de la classe et de la classe/jar contenant la classe n'existe pas dans le classpath.
OriginalL'auteur Rahul
NoClassDefFoundError se produit lorsque le nom de la classe est avec succès situé dans le classpath, mais pour une raison quelconque ne peut pas être chargé et vérifiées. Le plus souvent, le problème est qu'une autre classe nécessaires à la vérification de la classe nommée est absent ou est la mauvaise version.
En général, cette erreur signifie "double-vérifier que vous avez tout le droit POT de fichiers (de la bonne version) dans votre classpath".
OriginalL'auteur Hot Licks
C'est un très commune erreur lorsque vous exécutez une Hadoop Map/reduce programme local de l'IDE (Eclipse).
Vous devriez déjà ajouté hadoop-core.jar dans votre build path, donc pas d'erreur de compilation détectée par votre programme. Mais vous obtenez le message d'erreur lorsque vous exécutez, parce que hadoop-base dépend de commons-logging.jar (ainsi que quelques autres pots). Vous devrez peut-être ajouter les pots dans /lib de votre build path.
Je vous recommande d'utiliser Maven ou toute autre dépendance de l'outil de gestion pour gérer la dépendance.
OriginalL'auteur Branky
Veuillez lire l'article: http://kishorer.in/2014/10/22/running-a-wordcount-mapreduce-example-in-hadoop-2-4-1-single-node-cluster-in-ubuntu-14-04-64-bit/. Il explique comment référencer des dépendances dans Eclipse sans Marven. Cependant, Marven est préféré, à partir de ce que j'ai compris.
OriginalL'auteur Marcello