L'essentiel de Hadoop

Développer le reducer

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Développez le reducer en Java, sous Hadoop. Cette étape d'agrégation des données par groupe va retourner les données de sortie de l'algorithme.
08:10

Transcription

Maintenant que nous avons développé notre mapper, nous allons pouvoir nous attaquer au développement du reducer. De la même façon que pour le mapper, le reducer est une class Java que nous allons créer directement comme ça et qu'on va appeler MonReducer.jar Cette class doit étendre de la class Reducer d'Hadoop donc bien celle qui est dans le package org.apache.hadoop.mapreduce. Nous créons cette class et nous voyons que, à l'instar de la class mapper du package org.apache.hadoop.mapreduce la classe reducer a besoin de quatre types qui sont les clés et les valeurs d'entrée et les clés et les valeurs de sortie, du moins leur class en tant que writables. Pour celles d'entrée, nous n'avons pas le choix, il faut forcément que ce soit ceux de sortie du mapper. C'est-à-dire qu'ici comme on a mis Text et Text, il faut forcément que ce soit Text et Text, sans quoi notre reducer ne pourra pas se faire à la suite du mapper. Concernant la clé et la valeur de sortie, c'est libre à nous, en fonction de là où on va écrire, bien entendu. Nous allons écrire dans un fichier Hadoop va utiliser dans le FileOutputFormat directement un séparateur Tabulation donc va écrire un tsv et on va choisir d'écrire des Text comme clé et comme valeur directement, pour la sortie. On va donc écrire la méthode Reduce qu'on va donc surcharger, en utilisant Crtl + espace pour avoir l'autocomplétion directement dans Eclipse. On peut utiliser Crtl+Shift+F pour formater le code plus proprement notamment l'indentation. On a donc notre méthode Reduce qui est pré-remplie, elle va prendre en entrée un Text qui est la clé, puis elle ne prend pas un Text comme valeur mais un Iterable de Text. En effet, je vous rappelle qu'un reducer, contrairement au mapper qui prend un couple de clé valeur, le reducer prend une clé et un ensemble de valeurs représentés en Java par un itérable. Donc on va l'appeler Values et il va prendre également le contexte qui permet, notamment, de pouvoir écrire la sortie grâce à la méthode Context.write Une fois cela fait, nous allons pouvoir, de façon simple, récupérer et parcourir l'ensemble de nos valeurs. Pour ça, c'est relativement simple, on utilise un for qui va itérer sur l'iterable values et donc, à chaque fois, nous extraire la variable value. Cette variable est un Text, on va la transformer en String, plus pratique pour nous à utiliser. On va l'appeler sValue, comme String Value qui va être notre value.toString Pour chacune de ces valeurs, on va la mettre dans une map qui va avoir, pour chaque String, le nombre d'occurrence donc pour chaque produit, le nombre de fois qu'on l'a vu, dans le cadre de ce groupe. Pour cela, on va créer une map de java.util avec comme type String et Integer qu'on va appeler occurences et ça va être une nouvelle HashMap de String Integer. C'est parfait et donc, à chaque fois, nous allons rajouter sValue dans cette map avec soit 1 comme valeur, soit l'ancienne valeur +1. Pour cela, nous allons faire occurences.containsKey pour savoir s'il était dedans ou pas, donc de sValue. S'il est présent comme clé, dans ce cas-là, on récupère l'ancien et on rajoute 1, sinon on retourne directement 1. Ceci étant fait, nous allons désormais extraire dans une List, une List de String qui va représenter les produits. Ca va être une nouvelle ArrayList, toujours de String qu'on va directement instancier à partir des clés de occurences, occurences.keySet Ceci étant fait, nous pouvons désormais trier cette liste de produits, en fonction du nombre d'occurrences. Pour cela, nous allons nous servir de Collections.sort la méthode permettant de trier une List grâce à un comparateur, notre List, c'est Produits et notre comparateur va être un new Comparator avec un A de String. Nous corrigeons l'autocomplétion d'Eclipse et voilà, nous avons un new comparator de String que l'on peut développer. Il nous faut, c'est ce qu'Eclipse nous dit ici, ajouter la méthode Compare qui prendra deux String pour les comparer. Notre objectif est de retourner 1 si O2 est plus grand que O1, si le nombres d'occurrences de O2 est plus important que le nombre d'occurences de O1, zéro s'ils sont égal ou moins 1 ou un nombre négatif s'il est inférieur. En effet, on veut comparer O2 à O1 puisqu'on veut un ordre décroissant. Ainsi donc, on va retourner le nombre d'occurrences de O2 moins le nombre d'occurrences de O1. Cela est parfait, sauf que nous accédons à occurences qui n'est pas disponible ici. On va rajouter le final sur occurences afin que cela fonctionne. Nous avons donc notre List de produits ordonnée par nombre d'occurrences décroissantes. Il ne nous reste plus qu'à la retourner grâce à un Context.write qui va prendre notre clé valeur sous forme de Text. Notre clé, c'est le produit qu'on est en train de traiter, c'est la clé du groupe. Notre valeur doit être un Text correspondant à nos différents produits séparés par une virgule, par exemple. Donc on va faire un new Text dans une String représentant nos produits. On va la générer ici, c'est-à-dire qu'on initialise à vide et, pour chaque produit dans la List ordonnée Produits, nous allons simplement pouvoir concaténer son nom à la chaîne de caractères et ajouter une virgule. À noter que cela serait plus propre par un autre biais notamment pour ne pas avoir de virgule finale mais ce n'est pas très grave, ou en passant avec une String builder ce qui serait plus performant mais ce n'est pas à l'ordre de cette formation. Notre reducer est ainsi fait. Nous voyons que nous avons récupéré un iterable de Produits que nous avons agrégé à la sortie et que nous ressortons, dans tous les cas, ici, un ensemble de clé valeur donc le produit et la List des produits liés.

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 !