Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

L'essentiel de Hadoop

Développer un MapReduce en PHP

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Mettez en pratique le paradigme MapReduce en développant les méthodes map() et reduce() en langage PHP.
10:30

Transcription

Grâce à Hadoop streaming, Hadoop est capable d'exécuter des MapReduce écrites en n'importe quel langage. Effectivement, il suffit d'avoir des exécutables qui prennent des choses en entrée et ressortent des sorties donc notamment sur ce qu'on appelle l'entrée standard STT IN et la sortie standard STT OUT. Pour le mettre en pratique, nous allons développer ici notre MapReduce en PHP et le faire fonctionner. Ceci est relativement simple, donc nous allons faire un nouveau projet dans notre work space, qu'on va appeller « mon premier MapReduce PHP » et, dans notre répertoire monpremierMapReducePHP, nous allons créer un exécutable pour le mapper et un exécutable pour le « reducer. » Commençons donc par notre mapper. Comme nous voulons que ce soit un fichier exécutable, nous allons mettre un seul bang, c'est-à-dire une commande permettant d'exécuter ce fichier. Ici, user/bin/php qui correspond à la commande php sur le système. Ensuite, nous allons écrire notre code php de façon très classique, simplement en considérant que sur l'entrée standard nous allons récupérer les inputs ligne par ligne et nous allons devoir écrire sur la sortie standard des clés valeur, séparées par des tabulations. Très bien, alors lisons nos inputs, ligne par ligne. Pour cela, on va faire quelque chose de très classique, c'est-à-dire un fgates de STTIN, cette constante représentant en php l'entrée standard. On va vérifier si c'est différent de false donc, si jamais, dire toujours si la ligne n'est pas false, si elle n'est pas vide. Attention, on met bien une comparaison stricte. Ensuite, on va trimer cette ligne afin, notamment, d'enlever les caractères de retour charriot et de fin de lignes, et on va la spliter, c'est-à-dire générer un tableau de strings, de chaîne de caractères, pour chaque partie séparée par exemple par des virgules puisque notre entrée est séparée par des virgules. On va parcourir ces chaînes de caractères, comme on l'a fait, au final, en Java, et donc pour I allant de zéro à la taille de notre tableau Parts à chaque fois, pour chaque produit dans notre caddy on va itérer. Et à chaque fois on va lui associer un produit suivant, c'est-à-dire J commençant à I plus 1, comme on a fait en Java jusqu'à donc la taille de Parts. Dans tous les cas, on va donc... On faisait en Java un context.write pour écrire une clé valeur, en php on va se faire un echo qui va écrire notre clé, soit Parts de dollar I un caractère tabulation, qu'on peut écrire comme cela ou bien mettre directement une tabulation entre quotes et notre valeur, donc ici Parts de J et il ne faut surtout pas oublier en php ou dans n'importe quel langage le retour à la ligne donc qu'on va mettre via la constante php End Of Line. Voilà, notre mapper est pathé, nous allons l'enregistrer et désormais nous pouvons commencer notre reducer. De la même façon, un fichier reducer.php qui commence par le shell bang user bin php et par la déclaration que c'est du php. On va donc ici faire, de la même façon, une boucle while qui va itérer sur chaque ligne. Il est à noter qu'un reducer ne prend pas à chaque fois une clé valeur mais une clé ET un ensemble de valeurs, un iterable. Afin de pouvoir faire cela avec Hadoop streaming, ils ont choisi de répéter systématiquement la clé. Aussi sur chaque ligne de l'entrée standard, nous allons récupérer une clé et une valeur qui sont groupées par clé. Aussi c'est à nous de détecter quand la clé change et, de ce fait-là, quand on change de groupe. Toujours de la même façon que dans le mapper, on va traiter notre ligne d'entrée donc on va faire un trim de la ligne pour supprimer les caractères de fin de ligne. À chaque fois, on va récupérer la clé et la valeur de la ligne en faisant un explode sur le caractère Tabulation et en prenant la première partie en clé et la seconde partie en valeur. Désormais, on a trois possibilités : soit je suis sur la première ligne, soit je suis sur une nouvelle clé, soit je suis sur une clé qui existe déjà. Pour décider de cela, on va garder une variable, dans une variable en tout cas, la clé qu'on était en train de traiter jusque là et on va l'initialiser à nul. On va garder également un tableau de valeurs qui sont donc les valeurs pour la clé qu'on est en train de traiter. Si je suis sur ma première clé, dans ce cas-là c'est relativement simple, c'est que previous key est nul même avec un triple Egal et, dans ce cas-là, tout ce qu'on a à faire a priori, c'est que previous key est égal à dollar key. On va également, à chaque fois, ajouter notre valeur dans le tableau, plus exactement on va l'ajouter et l'incrémenter. Php va automatiquement, alors non pas automatiquement en fait, créer la valeur donc on va la créer si jamais elle n'existe pas. On utilise pour cela un array key exist pour savoir si la valeur est dans les clés du tableau et donc, si elle n'existe pas, on va l'initialiser à zéro, avant de l'incrémenter. Très bien, continuons ici avec nos cas donc premier cas, on était sur la première ligne, pas grand chose à faire. Le second cas va être de savoir si on change de groupe, c'est-à-dire que la nouvelle clé est différente de la précédente. Dans ce cas-là, il va falloir traiter le groupe à proprement parler. Je vous recommande de faire ce traitement dans une fonction à part, fonction qui va traiter le groupe et qui va prendre comme paramètres la clé à traiter donc attention qu'il y ait bien la précédente puisque je ne traite pas la nouvelle, et qui va prendre l'ensemble des valeurs. Il est à noter que dans dollar values nous n'avons pas encore ajouté notre valeur actuelle puisque qu'on traite le groupe précédent. Après l'avoir traité, on remettra les valeurs à zéro dans un tableau vierge et nous changerons la clé précédente qui deviendra la clé actuelle. Il ne nous reste donc plus qu'à coder la fonction Process group qui prend en entrée une clé et un tableau de valeurs. Elle représente plus ou moins ce que l'on connait déjà directement en Java dans la fonction Reduce. Ici, notre fonction Process group doit uniquement trier le tableau de valeurs A pour garder l'association R pour le faire dans l'ordre inverse en reverse c'est-à-dire en décroissant et mettre la valeur avec le nombre le plus haut, en haut. Une fois que c'est trié, on peut simplement afficher en écrivant la clé, une tabulation pour séparer la clé de la valeur et l'ensemble des clés du tableau valeur dans l'ordre, qu'on va séparer par une virgule grâce à la fonction implode On affiche bien le array keys uniquement pour avoir les clés puisque le nombre de fois que les valeurs sont apparu ne nous importait que pour l'ordre. On finit toujours avec le php EOL pour rajouter la fin de ligne donc sur la ligne. Attention, comme vous le voyez ici, nous n'appelons Process group que quand la clé change. Il ne faut donc pas oublier de l'appeler à la fin. On va donc appeler Process group ici sur previous key et dollar values Nous venons de finir notre reducer et nous allons pouvoir désormais le lancer grâce à Haboop streaming.

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 !