L'essentiel de Hadoop

Lancer des MapReduce avec Hadoop Streaming

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Découvrez comment lancer un algorithme MapReduce, développé en PHP ou autre, sur la plateforme Hadoop à l'aide de Hadoop Streaming.
08:30

Transcription

Avant de lancer notre MapReduce développé en PHP sous Hadoop avec hadoop-streaming, nous pouvons le lancer directement en local sur notre machine grâce à quelques commandes bash. En effet, en fait lancer un MapReduce streaming sous Hadoop correspond uniquement à avoir des exécutables qui prennent des entrées en entrée standard et donnent des sorties sur la sortie standard. Il est fort possible de l'utiliser directement de ce fait-là en page. La première chose à faire est donc de les rendre exécutables. On va donc faire un chmod +x de mapper.php reducer.php pour les rendre exécutables. Ensuite, nous pouvons directement prendre l'entrée, notre fichier qu'on va retrouver dans monPremierMapReduce donnees.csv, mes données générées et les passer, grâce à un pipe directement dans le mapper qui pourrait par exemple passer grâce à un pipe sa sortie dans un sort qui lui-même passerait par un pipe sa sortie dans un reducer. Si on exécute cela, ça devrait fonctionner sauf que le problème, c'est qu'en local et de manière non distribuée, non parallélisée, l'algorithme risque d'être assez long. De ce fait-là, on va, de préférence, prendre un sample, c'est-à-dire prendre uniquement les 1000 premières lignes de ce fichier et les mettre dans un fichier sample.csv On peut alors recommencer, on va faire un cat de sample.csv pour lire toutes les lignes une par une, les passer dans le mapper, prendre la sortie de mapper, les passer dans un sort, prendre la sortie du sort et le passer dans le reducer. Ca s'exécute et on voit effectivement une sortie telle qu'on le prévoit. Notre MapReduce en PHP semble fonctionner et cette ligne de commande permet de lancer le MapReduce tel qu'Hadoop le ferait mais sans parallélisation, juste sur un poste local. C'est très pratique pour pouvoir tester nos algorithmes développés avec des exécutables, sans même avoir besoin du cluster Hadoop. Désormais il ne nous reste plus qu'à lancer ce MapReduce sur Hadoop. Pour ce faire, c'est relativement simple. Nous allons donc, toujours pareil, appeler la commande Hadoop.jar sauf que cette fois-ci, nous n'avons pas de Jar, nous allons utiliser un Jar existant d'Hadoop qui s'appelle Hadoop.streaming. Il se trouve dans user/lib/hadoop-mapreduce et donc ici on a hadoop-streaming.jar Nous avons ce Jar et nous allons passer les paramètres relatifs à hadoop-streaming notamment nous allons devoir passer input avec le répertoire d'input sur l'HDFS donc mpmr/input dans ouput, le répertoire d'output sur l'HDFS, ensuite mapper où on va passer le mapper reducer où, de la même façon, on va passer le reducer numReduceTasks pour spécifier combien on veut de reducer, mettons-en dix et file pour spécifier les fichiers que l'on veut disponibles sur chacun des serveurs du cluster Hadoop. Comme toujours, on n'a pas supprimé le répertoire d'output donc il faut le faire au préalable. On le supprime et on peut alors relancer notre commande hadoop-streaming pour avoir notre MapReduce qui s'exécute. On a une URL de suivi, on va donc l'utiliser pour suivre l'exécution de notre MapReduce et on voit donc qu'on a deux mappers qui ont été lancés, qui sont en train de progresser, qui sont terminés et les reducers qui commencent. Si on suit les compteurs, on a un million de lignes qui ont été traitées par les mappers, un peu plus de six millions 300 000 lignes qui ont été ressorties par les mappers. Voilà, notre MapReduce est terminé donc les compteurs ont dû être mis à jour et désormais on a un nombre de group records de dix, donc où on a bien les dix projets qui ont été traités. On peut aller directement sur l'HDFS pour voir le résultat de notre MapReduce exécuté en PHP. On voit qu'il correspond avec celui exécuté en Java. C'est parfait. Par ailleurs, tout MapReduce lancé avec hadoop-streaming pouvant s'écrire sous la forme cat de input.txt que l'on va piper dans mon exécutable mapper que l'on va piper dans sort que l'on va piper dans mon exécutable reducer avant de récupérer l'output, on peut imaginer sans problème utiliser n'importe quel type d'exécutable. Ainsi il est même possible d'utiliser par exemple bin/cat simplement pour dire que le mapper va correspondre à la commande cat du système et donc va juste faire passer les données. On peut exécuter la commande /bin/wc par exemple pour compter le nombre de mots qui arrivent dans le reducer. Ainsi cet exemple va lancer bin/cat comme mapper bin/wc comme reducer et on va se récupérer avec un word count codé ici en bash directement plus exactement avec les exécutables du système GNU/Linux qui va fonctionner. Cela veut dire qu'on va l'écrire sous Hadoop via la manière suivante : on va lancer notre commande hadoop jar avec le jar vers hadoop-streaming. On va préciser en paramètre le répertoire d'input sur l'HDFS donc imaginons data/input le répertoire d'output toujours sur l'HDFS data/output le mapper qui sera ici le bin/cat et le reducer qui sera le bin/wc Il est à noter que si l'on fait ça comme ça, on ne va pas passer les exécutables sur tous les serveurs mais tous vont exécuter leur bin/cat local. Ainsi cela fonctionnera, à condition que tous les serveurs aient accès à une commande bin/cat en local et qui est propre à leur système notamment que tous serveurs sous GNU/Linux et qu'ils aient tous accès à la commande bin/cat. Si jamais on veut passer toujours un fichier en plus qui doit être déployé sur tous les serveurs, dans ce cas-là, on peut faire -file Attention, quand vous allez exécuter du Hadoop-streaming sur un cluster de serveur, il est important de vérifier que les fichiers que vous allez compiler sont exécutables, de la même façon, sur tous les serveurs. Il ne faut donc pas que cela ait été compilé pour un autre système ou une autre architecture que ceux qui sont présents sur votre cluster. Enfin, il est à noter qu'il existe Hadoop pipes qui permet d'exécuter des programmes C++ directement sur Hadoop en héritant de class mapper et reducer et en ayant à des types de plus bas niveau et sans passer par ce process de concaténation et de pipe d'entrée et de sortie. Hadoop pipes a été developpé via l'interface SWIG donc ce n'est pas du JNI, c'est du SWIG et ça passe, par contre, par l'API V1 de MapReduce.

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 !