L'essentiel de Hadoop

Créer le driver

Testez gratuitement nos 1257 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Développez un driver de MapReduce, dans le but de piloter l'algorithme et de le paralléliser sous Hadoop YARN.
09:18

Transcription

Maintenant que nous avons nos données en entrée avec notre mapper et notre reducer, il nous faut une class Java avec une méthode main pour pouvoir le configurer et le lancer. C'est-à-dire lui dire d'enchaîner le mapper et le reducer sur quelle donnée et dans quelle sortie. Pour ça, on va créer ce qu'on appelle un driver. Un driver qui est là pour conduire le MapReduce, pour le configurer. Pour cela, ça va être une nouvelle class qu'on va appeler MonDriver, de façon très originale, et que l'on va faire étendre un objet de type Configured qui est dans org.apache.hadoop.conf et qui permet de récupérer la configuration de Hadoop et de l'appliquer directement. On va rajouter en plus une implémentation de l'interface Tool, sans s dans org.apache.hadoop.util qui permet de simplifier la création de méthodes exécutables directement. On va lui rajouter un main. Nous créons cette class, voilà, Eclipse nous génère le tout avec run qui a un string args et une méthode main. Pour utiliser directement l'implémentation Tool, l'objectif est systématiquement de récupérer la configuration en faisant un objet configuration qui vient de org.apache.hadoop.conf, attention de ne pas se tromper, et qui est donc une nouvelle configuration. Automatiquement, Hadoop va prendre les paramètres disponibles dans les fichiers, sur le système et va les appliquer. Ensuite, on va appeler la méthode static ToolRunner.run qui va prendre une configuration, un tool et un string args donc on a la configuration juste au-dessus, on l'a définie en faisant un new configuration. Pour le tool, ça va être un new MonDriver qui est un tool puisque ça implémente cette interface et pour args, ce sont celles qui ont été passées directement ici. Donc, ToolRunner peut déclencher des exceptions, on va juste les froze et on va faire un system.exit de ceci puisque ToolRunner.run retourne un int correspondant à l'état dans lequel l'outil se termine. Ceci va permettre de lancer la méthode run avec les args et avec disponible directement un get Configuration qui permettra de récupérer la configuration. Dans cette méthode, il va falloir que l'on définisse un nouveau job Hadoop qui est un ensemble de MapReduce. Job se trouve bien dans le package org.apache.hadoop.mapreduce, attention à ne pas confondre avec le mapred, qui est celle de la V1 et se récupère via un job.getInstance. Pour ce job, on va passer différents éléments, notamment un set.jarByClass qui va permettre à Hadoop de connaître le Jar à envoyer sur chacun des serveurs, ce qui lui permet de déployer le code à exécuter sur chacun des serveurs où on va dire qu'il va lui falloir le Jar contenant le mapper. On va considérer que le reducer sera dans le même Jar et donc qu'il n'a pas besoin d'être spécifié. On va donner également un nom à ce job en faisant un job.setJobName donc directement ici on va pouvoir faire monPremierMapReduce et on va devoir désormais lui définir un ensemble d'options, notamment un job.setMapperClass qui sera MonMapper.class un job.setReducerClass qui lui permettra de savoir quel mapper et quel reducer exécuter, ainsi que plusieurs données dont il va avoir besoin. Par exemple, autant le nombre de mappers est défini par les entrées, autant le nombre de reducers est au choix directement du développeur. Donc, ici, on peut définir directement en mettant qu'il y aura dix reducers. On doit également dire par exemple quelles sont les clés qui passent du mapper au reducer. Pour cela, on a un job.setMapOutputKeyClass qui, pour nous, correspond à un Text Je vous le rappelle, c'est la classe qui sort ici, pour la clé et ici pour la valeur et qui doit être la même que celle qui arrive en entrée ici et ici. On spécifie que ce sera un Text pour la clé et un Text pour la valeur. On va devoir également spécifier quelles vont être les entrées et les sorties de notre MapReduce. On va ainsi avoir un job.setInputFormatClass qui va nous permettre de spécifier quel sera le input format, c'est-à-dire d'où viendront nos données. Ici, nous allons utiliser un TextInputFormat simplement pour lui dire de regarder à partir d'un fichier. Nous allons donc trouver le TextInputFormat qui vient bien du package MapReduce et non pas du package MapRed. Toujours .class pour spécifier la classe. En plus de ça, il faut lui dire d'où viennent les fichiers. Pour cela, on a une méthode static qui est là pour nous aider, qui est le FileInputFormat MapReduce .addInputPath qui permet de rajouter au job un InputPath, à savoir qu'on peut donc en mettre plusieurs, pour spécifier plusieurs InputPath. A chaque fois, les InputPath sont des Path correspondant à des répertoires dans lesquels tous les fichiers seront lus. Attention, le path est bien un path de org.apache.hadoop.fs.path. Pour nous, on va rajouter le path MonPremierMapReduce/npmr dans l'HDFS. De la même façon, il nous faut spécifier la sortie de notre job. Notre job aura un setOutputFormatClass qui sera un TextOutputFormat de MapReduce toujours. Attention. On va faire un FileOutputFormat et on va appeler la méthode static dessus cet OutputPath qui va définir le path de sortie. Comme nous le voyons, nous allons devoir définir un path et il n'est pas évident, ni recommandé de définir le même path. Cela mélangerait les entrées et les sorties. Aussi, il est conseillé de faire deux répertoires dans /npmr qui seront le Input et le Ouput. Une fois que nous allons faire ça, nous allons modifier directement ici, nos données en faisant un mkdir de npmr/input la même chose pour l'ouput et nous allons donc déplacer le fichier donnees.csv qui est dans npmr et le mettre directement dans npmr input. Désormais, il ne reste plus ici qu'à lancer notre job. Pour ça, nous allons faire un job.waitForCompletion avec le paramètre true qui permet de ne pas rendre la main tant que le job n'est pas terminé. Nous venons de terminer le driver, il ne nous reste plus qu'à lancer notre 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 !