L'essentiel de Hadoop

Utiliser la fonction reduce()

Testez gratuitement nos 1270 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Appréhendez le rôle de la fonction reduce() et tenez compte des contraintes en cours de développement.
04:51

Transcription

Maintenant que nous avons vu la fonction Map, attaquons-nous à la fonction Reduce. La fonction Reduce intervient après le Shuffle and Sort qui est opéré par le framework. Ainsi donc, la fonction Reduce va récupérer les résultats de la fonction Map, donc les clés-valeurs qui ont été ressorties par la fonction Map mais qui ont été au préalable triées et regroupées directement par le framework Hadoop. Ainsi donc, la fonction Reduce ne va pas récupérer, à l'instar de la fonction Map, des clés-valeurs, mais une clé et plusieurs valeurs. En effet, on remarque que même si dans notre graphique, on a montré les lignes A, 1 A,1, la clé est forcément toujours la même, A, puisque ça a été regroupé par clé. Ainsi donc, dans la réalité et dans le framework Hadoop, la fonction Reduce va récupérer A et une liste de valeurs, c'est-à-dire ici 1 et 1. De la même façon, elle va récupérer B et une liste de valeurs qui sera 1, 1, 1. Et de la même façon pour C. Donc, la fonction Reduce va récupérer une clé et une liste de valeurs et va devoir ressortir systématiquement zéro, un ou plusieurs couples de clés-valeurs. Dans notre cas, à chaque fois que la fonction Reduce est appelée, elle va ressortir exactement un couple de clé-valeur. En effet, dans le premier cas, elle va récupérer A, 1, 1 en entrée et elle va faire la somme des différentes valeurs pour ressortir A, 2. Donc, à chaque fois elle va simplement faire la somme des valeurs pour ressortir à proprement parler l'entrée. Il est possible pour la fonction Reduce bien entendu de ressortir zéro couple de clé-valeur ou plusieurs si l'algorithme le nécessite. À l'instar de la fonction Map, la fonction Reduce doit répondre aux deux contraintes essentielles pour la distribution de l'algorithme. Qui sont le fait de ne pas avoir de fuite de mémoire, c'est-à-dire que la fonction Reduce doit libérer systématiquement sa mémoire à la fin de son exécution et ne pas avoir de fuite de mémoire à proprement parler. Ainsi donc, elle ne doit rien stocker de manière globale pour pouvoir simplement y accéder par la suite. Alors, c'est un petit peu plus compliqué que pour la fonction Map en fonction de l'algorithme et des données en entrée. En effet, la fonction Reduce va prendre en entrée une liste de valeurs, il faut savoir définir si cette liste va être d'une taille déterminée et limitée, c'est-à-dire si elle va pouvoir tenir en RAM et qu'on la stocke ou si on va devoir la traiter au fur et à mesure afin également de ne pas avoir de contrainte de mémoire à ce niveau-là. En effet, dans le cadre du word count, donc A peut apparaître plusieurs centaines de milliers de fois et potentiellement n'est pas déterminée. Il n'entre pas dans une limite en fonction de la taille de notre corpus de texte en entrée. Ainsi donc, il ne faut pas que la fonction Reduce stocke les valeurs au fur et à mesure pour pouvoir faire la somme à la fin. Elle doit donc les traiter directement sans fuite de mémoire, et donc uniquement conserver un compteur qui correspond à la somme et qu'elle incrémente à chaque fois qu'elle parcourt une valeur. Ainsi donc, Java ne lui passe pas une liste de valeurs mais un « Iterable » qui permet de parcourir l'ensemble des valeurs sans avoir de fuite de mémoire. C'est donc un petit peu plus compliqué de répondre à cette contrainte dans la fonction Reduce. Dans certains cas, cependant, on peut s'en passer si on sait que le nombre d'éléments dans la liste de valeurs va être de taille déterminée et répondant à certaines limites. La seconde contrainte, comme la fonction Map, est donc d'être stateless, c'est-à-dire de ne pas dépendre d'un état et d'avoir le même résultat que ce soit la première ou la 23e fois qu'elle s'exécute et qu'elle s'exécute sur la première ligne, ou la deuxième ligne ou la troisième ligne, pour le premier ensemble d'entrée, le deuxième ensemble d'entrée ou le troisième ensemble d'entrée. Et donc qu'elle ressorte toujours le même résultat, qu'elle s'exécute pour la première fois ou la 23e fois. C'est toujours essentiel afin de pouvoir assurer la distribution de la fonction Reduce sur le framework qu'Hadoop puisse en lancer plusieurs en parallèle de manière transparente.

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)
Aucun commentaire n´est disponible actuellement
 
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 !