L'essentiel de Hadoop

Suivre l'évolution du MapReduce

Testez gratuitement nos 1257 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Appréhendez les interfaces permettant de suivre l'exécution de votre algorithme développé sous Hadoop YARN.
05:15

Transcription

Jusqu'à présent, nous avions fait fonctionner notre MapReduce uniquement sur des jeux de données relativement courts. En effet, nous le faisions fonctionner sur 1 000 paniers, 1 000 lignes dans notre fichier d'entrées. Cela est très peu, surtout dans le cadre du Big Data, aussi nous allons essayer de le faire fonctionner sur plusieurs lignes, sur beaucoup plus de lignes donc, pour cela, nous allons modifier notre script de génération des données et nous allons mettre, par exemple, 1.000.000 de paniers. Nous allons relancer notre script de génération de données, en faisant php donnees.php et en mettant ça dans donnees.csv, afin d'avoir un fichier de 1.000.000 de lignes, sur lequel on va lancer le traitement. Une fois que ce fichier aura été généré, nous allons l'envoyer sur l'HDFS, toujours dans le répertoire « mpmr/input ». Pour cela, nous allons utiliser la commande put, cependant comme le fichier existe déjà, il faut bien rajouter l'option -f sans quoi Hadoop refusera de l'écrire parce qu'il écrasera un fichier existant. On met /put donnees.csv et le répertoire de destination soit mpmr/input. On laisse HDFS le transférer dessus et on va vérifier, a priori, que tout ce qu'il y a dans le répertoire /input fasse bien 1.000.000 de lignes. Pour cela, on fait un cat pour avoir le résultat et on compte le nombre de lignes. On en a bien 1.000.000. Très bien, nous pouvons donc désormais relancer notre MapReduce. Cependant, n'oubliez surtout pas de vider votre répertoire de sortie, sans quoi Hadoop refusera de lancer le MapReduce. On fait donc un rm -r de /mpmr/ouput pour non seulement le vider mais, en plus, le supprimer. Ensuite, on peut relancer la commande hadoop jar, avec le nom du jar et mon driver pour lancer le MapReduce. On y voit, non seulement, le numéro du job mais également le lien pour le suivre. On peut donc utiliser directement ce lien pour aller suivre le job. En allant sur ce lien, on voit directement ici, les choses qui sont en train de fonctionner. Ici, on a un mapper qui est en train de tourner et dix reducers en attente. Si je fais F5, ça rafraîchit la page et je vois que désormais mon mapper est terminé avec succès et que j'ai un reducer qui est terminé, trois en train de tourner, six en attente. Si je refais F5, cela s'actualise de la même façon. Je peux regarder, notamment, sur tout ce qui est en train de se faire : le statut, leur progression mais également, potentiellement, leur log. Si je refais encore une fois F5, je vois que mon job vient de se terminer en succès. Aussi, dans la console, il m'a libéré la console. On voit malgré tout que j'ai un mapper qui se termine en succès, dix reducers qui se sont terminés en succès et un reducer qui a été killé. Cela est normal. En effet, nous savions que dix reducers que nous voulions exécuter, le reducer supplémentaire, ici, a été exécuté pour ce qu'on appelle de la « speculative execution », c'est-à-dire qu'Hadoop a lancé deux fois le même reducer sur les mêmes données afin de voir si jamais il n'y en a pas un qui allait plus vite que l'autre. Une fois que le premier s'est terminé, il a donc killé le second. C'est bien pour cela qu'il faut faire attention et veiller à ce que nos mappers et nos reducers soient typeless et ne touchent à rien d'autre qu'à leurs sorties. On a également de disponible les compteurs, ici, qui, de la même façon, quand on est en terminal affiche, par exemple, le nombre de groupes traités par les reducers. En plus, en cliquant sur un compteur, on voit le détail par tâche, c'est-à-dire par mapper ou par reducer. On voit donc que le mapper n'a traité aucun groupe, c'est normal, c'est au reducer de le faire, et que certains reducers ont traité zéro groupe, d'autres un et d'autres encore, deux. On peut voir, de la même façon, le détail des reduce_output_records qui correspond normalement à la même chose. De la même façon, sur chacun des jobs, on va avoir, par exemple, des logs qui vont nous permettre de suivre ce qui s'est passé, pour chacune des tâches, pour chaque mapper ou chaque reducer et qui permet, en plus, d'afficher les sorties stderr et stdout, très pratiques si on veut utiliser des system.out.println ou system.r.println, dans nos MapReduce afin de les débugger.

L'essentiel de Hadoop

Mettez en pratique les concepts spécifiques à Hadoop. Abordez l'HDFS pour le stockage, les MapReduce pour le traitement, ainsi que la base de données NoSQL d​e Hadoop : HBase.

3h43 (42 vidéos)
Michael B.
J'ai une erreur de ce type:
17/04/10 02:57:23 INFO mapreduce.Job: map 100% reduce 10%
17/04/10 02:57:28 INFO mapreduce.Job: Task Id : attempt_1491811861994_0002_r_000001_0, Status : FAILED
Error: java.lang.NullPointerException
at MonReducer.reduce(MonReducer.java:23)
at MonReducer.reduce(MonReducer.java:1)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:171)

pourriez vous m'aider?
Simon Gilliot Simon Gilliot

Bonjour et merci de votre intérêt pour cette formation.

Il semblerait, selon le message que vous écrivez, que vous rencontrez une NullPointerException (NPE pour les intimes) à la ligne 23 de MonReducer.java. Cela signifie qu'à cette ligne, vous utilisez une instance qui est null, c'est-à-dire qui n'a pas été initialisée.

Je vous recommande de relire attentivement votre code à cette ligne et de vérifier que tous les objets utilisés sont bien instanciés (par exemple la map "occurences"). Vous pouvez également vous appuyer sur le code présent dans les fichiers d'exercice pour comparer avec le vôtre.

Enfin, si malgré tout, vous ne trouvez pas, n'hésitez pas à débuguer, ne serait-ce qu'en faisant un System.out.println() de chacune des variables utilisées à cette ligne afin de trouver la coupable. Vous pouvez pour vous référer à la vidéo "Déboguer les modèles MapReduce".

Bon courage pour votre formation

 
Logiciel :
HBase HBase 1.2
Spécial abonnés
Date de parution :31 mars 2017

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !