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.

Développer une application Big Data avec Hadoop

Réaliser des jointures de données

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Combiner des données non-relationnelles de sources diverses n'est pas simple. Apprenez à réaliser des jointures de données.
06:48

Transcription

Dans le cadre de notre Mapper, nous avons plusieurs dimensions que nous avons en partie traitées, cependant, nous n'avons pas du tout réalisé, notamment, les dimensions longitudes et latittudes. Pour cela, il nous faut à chaque fois, pouvoir retourner la longitude et la latitude par rapport aux informations que l'on a. Sauf que l'on n'a pas ces informations dans Hbase et effectivement, dans les fichiers directement disponibles du Ghcn, la longitude et la latitude ne sont pas répétées à chaque ligne, elles dépendent uniquement de la station. Ainsi donc, la longitude et la latitude dépendent de la station et se retrouvent dans un fichier qui s'appelle Ghcnd-station.txt Nous allons donc à chaque fois, télécharger ce fichier pour lire le nom de la station, la longitude et la latitude. C'est là où nous pouvons trouver ces informations. Alors, de la même façon que nous avons chargé les données dans Hbase initialement, en tout cas dans l'hdfs, nous allons envoyer ce fichier vers l'hdfs, en faisant un WGet- pour faire la sortie sur la sortie standard, et on va la piper dans un « hdsf dfs - put ». « - » pour prendre l'entrée standard. Et l'on va nommer ce fichier « data/station.txt ». Donc, désormais dans notre code Java, nous allons pouvoir lire ce fichier et nous allons vouloir avoir un Mapper qui va, à la fois, lire les données de Hbase et lire les données de ce fichier, pour opérer une jointure entre ces deux sources de données. Alors, c'est quelque chose qui va être plus simple qu'il n'y parait à faire dans le Mapper mais parce que l'on va introduire une nouvelle contrainte. On a deux sources de données, on veut réaliser une jointure, il faut absolument que l'on distingue une source qui peut tenir en mémoire, qui a donc une taille limitée. Ici, c'est relativement simple, c'est donc la liste de nos stations. On va considérer que la liste de nos stations est finie et déterminée à une limite, limite que l'on va juger qui peut tenir en mémoire. À chaque fois qu'actuellement on lance un de nos Mappers, il a, à sa disposition, 3 gigaoctets de mémoire, de RAM. Donc, 3 gigaoctets, dont le Java Hyperspace, qui servent à stocker l'intégralité des variables. Donc l'on va considérer que la liste des stations avec leurs longitudes et latitudes, va pouvoir tenir dans cette mémoire, avec les autres variables bien entendu, que l'on utilise dans le Mapper. Alors, une fois que l'on a dit ça, une fois que l'on a ajouté cette contrainte, cela devient tout de suite beaucoup plus simple, On peut directement lire le fichier. Alors pour cela, on va faire une méthode simplement, qui lors de la construction du Mapper, va lire le fichier et le stocker dans une « map » Java. Sur les MapReduce, l'on utilise pas à proprement parler le constructeur mais on utilise la méthode Set Up qui est initialisée directement, qui est appelée directement par le framework, au lancement du MapReduce. Alors pourquoi ? Notamment, parce qu'il nous donne accès au contexte et donc on peut encore à cet endroit-là, par exemple, incrémenter des compteurs ou quoi que ce soit. La première chose à faire, c'est quand même d'appeler le super.setup et on va simplement dans le setup, lire le fichier. Alors, je vous propose ici un code tout prêt qui va permettre de lire le fichier, il va charger... ...on va, à chaque fois donc, prendre les bons apports et il va charger à partir du file system, le fichier /data/stations, ouvrir donc le fichier avec un fs.open, ouvrir un InputStreamReader dessus, et le charger dans un BufferedReader. On va parcourir le fichier ligne par ligne. Donc, grâce à un While, on va vérifier que le fichier, qui est un fichier à position fixe, donc, à chaque fois la station commence à la même position, la longitude à la même et la latitude à la même. On va vérifier qu'il a assez de caractères dedans, et on va simplement faire des substrings sur la chaine de caractères, pour prendre à chaque fois, le nom entre 0 et 11, la longitude et la latitude. On va mettre le tout dans une map station que l'on n'a pas créée mais que l'on va désormais créer donc, et qui va contenir, dans le premier paramètre, le string, qui sera le nom de la station. Et en second paramètre donc, un tableau de flotte qui seront les coordonnées longitude et latitude. Une fois cela fait, nous avons initialisé notre tableau des stations et nous l'avons à disposition pour toute la durée de vie du Mapper, c'est-à-dire, que nous faisons l'initialisation une fois pour tous les appels, à la fonction map. Attention, si nous utilisons plusieurs Mappers, parce que nous avons plusieurs régions dans Hbase, nous ferons cette initialisation plusieurs fois. Une fois pour chaque Mapper. Et nous allons pouvoir ici rajouter enfin, dans le Switch Case, deux nouvelles dimensions, le case latitude, par exemple, et qui va vérifier systématiquement si la station est présente dans le tableau des stations. On va pouvoir faire un station.containsKey de station et auquel cas, on « return » rien du tout. Sinon, qui va retourner directement la longitude ou la latitude. Sauf que l'on ne va pas vouloir retourner la longitude ou la latitude. Mais, on va vouloir retourner à chaque fois, la longitude ou la latitude arrondies à 5 degrés près, à peu près. Cela veut dire que l'on va faire un stations.get, directement sur « stations », on va récupérer la coordonnée 0 pour avoir la latitude et on va l'arrondir à 5 degrés près. Donc pour cela, on fait un Math.round, de la valeur divisée par 5, que l'on remultiplie par 5 juste après. On doit retourner une string, la façon la plus simple pour caster un string, c'est de la concaténer avec une autre string. On fait la même chose, bien entendu, pour la longitude. Sauf que cette fois-ci, on va prendre directement le paramètre 1 de l'objet station, en tout cas qui est retourné. Voici comment faire une jointure de données et désormais donc, notre Mapper supporte les groupes, les dimensions, latitude et longitude, retournant à chaque fois la latitude et la longitude arrondies à 5 degrés près.

Développer une application Big Data avec Hadoop

Concevez une application Big Data avec la suite Hadoop. Stockez des données dans l'HDFS et dans HBase, traitez-les en MapReduce sous YARN, exportez-les dans MySQL via Sqoop, etc.

2h31 (25 vidéos)
Aucun commentaire n´est disponible actuellement
 

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 !