Comment déboguer hadoop mapreduce à partir d'eclipse?
Je suis à court d'hadoop dans une seule machine, uniquement local d'installation, et je suis à la recherche d'une belle, indolore pour déboguer les cartographes et les réducteurs dans eclipse. Eclipse a aucun problème à l'exécution de tâches mapreduce. Cependant, lorsque je vais pour le débogage, il me donne cette erreur :
12/03/28 14:03:23 AVERTIR mapred.JobClient: Pas de fichier jar jeu. Les classes de l'utilisateur ne peut pas être trouvé. Voir JobConf(Classe) ou JobConf#setJar(Chaîne de caractères).
Ok, donc je fais un peu de recherche. Apparemment, je devrais utiliser eclipse du débogage à distance des installations, et de l'ajouter à mon hadoop-env.sh
:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000
Je le faire et je peux étape par le biais de mon code dans eclipse. Seul problème, c'est que, en raison de "suspendre=y", je ne peux pas utiliser le "hadoop" commande à partir de la ligne de commande pour faire des choses comme regarder la file d'attente de travail; il se bloque, j'imagine parce que c'est en attente d'un débogueur pour la fixer. Aussi, je ne peux pas courir "hbase shell" quand je suis dans ce mode, probablement pour la même raison.
Donc en gros, si je veux retourner en arrière et vient entre "mode debug" et "mode normal", j'ai besoin de mettre à jour hadoop-env.sh
et redémarrer ma machine. Douleur importante. J'ai donc quelques questions :
- Est-il un moyen plus simple pour le débogage de tâches mapreduce dans eclipse?
- Comment se fait-eclipse peut exécuter mes tâches mapreduce très bien, mais pour le débogage j'ai besoin d'utiliser le débogage à distance?
- Est-il un moyen de dire à hadoop à utiliser le débogage à distance pour les tâches mapreduce, mais pour fonctionner en mode normal pour toutes les autres tâches? (comme "hadoop file d'attente" ou "hbase shell").
- Est-il un moyen plus facile pour passer
hadoop-env.sh
configurations sans avoir à redémarrer ma machine? hadoop-env.sh n'est pas exécutable par défaut. - C'est une question plus générale : qu'est-ce qui se passe quand je lance hadoop en local uniquement, de mode? Il n'existe aucun processus sur ma machine qui sont "toujours" et de l'exécution de hadoop emplois? Ou ne hadoop seulement faire des choses quand je lance le "hadoop" commande à partir de la ligne de commande? Qu'est-ce que l'éclipse de faire lorsque j'exécute un travail de mapreduce à partir d'eclipse? J'avais pour référence
hadoop-core
dans monpom.xml
afin de faire mon travail du projet. Est eclipse envoyer des travaux à mon hadoop exemple, ou est-il en quelque sorte de course à partir de lahadoop-core-1.0.0.jar
dans mon maven cache?
Ici est ma classe Principale :
public class Main {
public static void main(String[] args) throws Exception {
Job job = new Job();
job.setJarByClass(Main.class);
job.setJobName("FirstStage");
FileInputFormat.addInputPath(job, new Path("/home/sangfroid/project/in"));
FileOutputFormat.setOutputPath(job, new Path("/home/sangfroid/project/out"));
job.setMapperClass(FirstStageMapper.class);
job.setReducerClass(FirstStageReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
@Chris White suggère de commencer avec MRUnit de test de Map/reduce logique est une bonne idée: incubator.apache.org/projects/mrunit.html
OriginalL'auteur sangfroid | 2012-03-28
Vous devez vous connecter pour publier un commentaire.
Faire des changements dans
/bin/hadoop
(hadoop-env.sh
) script. Vérifiez que la commande a été tiré. Si la commande estjar
, puis seulement ajouter de débogage à distance configuration.Vous pourriez alos ajouter les options de débogage de votre shell $HADOOP_OPTS var, et ne pas avoir à modifier les hadoop script. l'exportation HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,serveur=y,address=8999"
OriginalL'auteur Jagdeep Singh
La seule façon vous pouvez déboguer hadoop dans eclipse est en cours d'exécution hadoop en mode local. La raison d'être, chaque carte de réduire l'exécution de la tâche au sein de l'ist propre JVM et quand vous n'avez pas hadoop en mode local, l'éclipse ne sera pas en mesure de débogage.
Lorsque vous définissez hadoop en mode local, au lieu d'utiliser hdfs API(qui est par défaut), hadoop modifications du système de fichiers à
file:///
. Par conséquent, l'exécutionhadoop fs -ls
ne sera pas un hdfs commande, mais plus dehadoop fs -ls file:///
, un chemin d'accès à votre répertoire local. Aucun des JobTracker ou NameNode s'exécute.Ces blogposts qui pourraient vous aider:
Cannot initialize Cluster. Please check your configuration...
avez-vous reçu local de débogage pour travailler avec Hadoop 2.4+?
Je n'ai jamais essayé... j'ai été en utilisant 2.2 dans le temps que j'ai posé cette question.
OriginalL'auteur Kapil D
Jumbune du débogueur se faire avec un minimum d'effort.
Le débogueur fournit le code de contrôle du niveau de débit de la statistique du travail MapReduce.
Utilisateur peut appliquer la regex de validations ou de ses propres définis par l'utilisateur classes de validation. Comme pour les validations appliquée, Débogueur de Flux vérifie le flux de données pour mapper et réducteur respectivement.
Il fournit également un tableau/graphique où le flux d'enregistrements d'entrée est affichée au niveau de la tâche, MONSIEUR le niveau, et le niveau de l'instance.
Inégalée les clés/valeurs représentent le nombre d'erreurs de clé/valeur des données de l'emploi résultat de l'exécution. Débogueur exercices vers le bas dans le code pour examiner le flux de données pour les différents compteurs, tels que les boucles et les conditions if, else-if, etc.
Jumbune est open source et disponible à http://www.jumbune.org et https://github.com/impetus-opensource/jumbune
OriginalL'auteur Mash
D'ailleurs recommandé MRUnit j'aime debug d'eclipse. J'ai un programme principal. Il instancie une Configuration et exécute le travail de MapReduce directement. Je viens de débogage avec eclipse standard Debug configurations. Depuis que j'ai inclure hadoop pots dans mon mvn spec, j'ai tous hadoop en soi dans mon chemin de classe et je n'ai pas besoin de le lancer à l'encontre de mes installé hadoop. J'ai toujours tester avec de petits ensembles de données dans les répertoires locaux pour rendre les choses faciles. Les valeurs par défaut pour la configuration se comporte comme un stand alone de hadoop (système de fichiers est disponible)
OriginalL'auteur Jaime Garza
J'aime aussi déboguer via l'unité de test w/MRUnit. Je vais utiliser cette combinaison avec la approvaltests qui crée une visualisation facile de la Carte de Réduire les processus, et il est facile de passer dans les scénarios qui ne sont pas. Il fonctionne également de manière transparente à partir d'eclipse.
Par exemple:
Produira la sortie:
Il y a une vidéo sur le processus ici: http://t.co/leExFVrf
OriginalL'auteur llewellyn falco