Vous êtes sur la page 1sur 6

Institut National des Sciences Appliquées et de Technologie Tunisie

Big Data
2013-2014

TP2- D ESIGN P ATTERNS


D ANS H ADOOP
Dr. Lilia SFAXI – Mme Wahiba Ben Fraj

Objectifs du TP : Encore plus d’exercices sur Hadoop, cette fois


ci en respectant les différents patrons de conception.
TP2 : Design Patterns dans Hadoop

I. Rappel sur les Design Patterns


Les Patrons de Conception (ou plus communément les Design Patterns )
permettent d’aider l’utilisateur à savoir QUAND utiliser Hadoop pour résoudre
ses problèmes.

Chacun de ces patrons représente une classe de problèmes récurrents pour


ceux qui manipulent les Big Data. Ce qui est utile, car on peut ainsi appliquer
une solution standardisée et unifiée pour chacune de nos difficultés.

Les Design Patterns les plus utilisés sont:

- Les Patrons de Filtrage


- Les Patrons de Récapitulation
- Les Patrons Structurels

Ce TP est largement inspiré du cours Introduction to Hadoop and MapReduce,


réalisé par Cloudera.

II. Patrons de Filtrage


Les Patrons de filtrage permettent de sélectionner certains enregistrements,
parmi la totalité des enregistrements existants dans votre source de données,
qui respectent un critère donné.

II.1 Filtrage Simple


Dans cette partie, nous travaillons sur les données d’un forum. Ces données
ont la forme suivante:

Id title tagnames author_id body node_type parent_id …

On s’intéresse au 5ème champs, soit le corps du message. Nous désirons dans


cet exercice extraire les posts les plus courts du forum, soit les posts dont le
corps contient uniquement une phrase. Une phrase est un texte qui soit ne
contient aucun signe de ponctuation parmi “ . ! ? ”, soit seulement l’un

Page 2
TP2 : Design Patterns dans Hadoop

d’entre eux comme dernier caractère. Les nouvelles lignes ne sont pas prises
en considération.

Activité 1. Les données source se trouvent dans le fichier forum_data.tar.gz


sous le répertoire data de notre Drive partagé.

- Décompresser ce fichier : tar zxvf forum_data.tar.gz


- On s’intéresse au fichier forum_node.tsv. Visualiser les premières lignes
de ce fichier pour voir la structure complète des données.
- Écrire et tester un Mapper permettant d’extraire uniquement les posts
d’une phrase ou moins.
- Écrire et tester un Reducer permettant de compter le nombre de posts.
- Combien y’a-t-il de posts avec une seule phrase ou moins?

II.2 Top 10
Nous nous proposons maintenant d’extraire les 10 posts les plus longs du forum.

Activité 2.

- Écrire et tester un Mapper permettant d’extraire les dix posts les plus
longs du forum

III. Patrons de Récapitulation


Ces patrons vous aident à avoir une compréhension globale et de haut
niveau de vos données.

III.1 Index
Nous nous proposons pour cet exercice de créer un index pour nos données,
c’est à dire un fichier permettant d’afficher

Page 3
TP2 : Design Patterns dans Hadoop

Activité 3.

- Écrire et tester un Mapper permettant d’extraire les différents mots d’un


post (les mots sont séparés par des caractères d’espacement, ou par
les caractères . ! ? : ; “ ( ) < > [ ] # $ = - / ), puis de les afficher dans des
lignes séparées, avec le node_id dans lequel ils se trouvent.
- Écrire et tester un Reducer permettant de donner, pour chacun des
mots, le nombre d’occurrences, ainsi que la liste des node_id dans
lesquels il apparaît.
- Tester le job Hadoop uniquement sur les 10000 premières lignes du
fichier forum_node. (le job exécuté sur toutes les données prend trop de
temps)
o Combien de fois est-ce que le mot difficult apparaît?
o Donner la liste des noeuds dans lesquels apparaît le mot difficulty.

III.2 Moyenne
On s’interesse dans cette partie à calculer la moyenne des ventes chaque
jour de la semaine

PS : pour extraire le jour de la semaine d’une date avec Python, utiliser


l’instruction suivante:

weekday = datetime.strptime(date,”%Y-%m-%d”).weekday()

Activité 4.

- Écrire et tester un programme MapReduce qui parcourt le fichier


purchases.txt pour extraire la moyenne des ventes pour chaque jour de
la semaine.
- Quelle est la valeur moyenne des ventes le Dimanche (Sunday)?

Page 4
TP2 : Design Patterns dans Hadoop

III.3 Combiner
Utiliser un combiner permet de faire des réductions sur le noeud Mapper
avant d’envoyer le résultat au Reducer, ce qui diminue considérablement le
traffic sur le réseau, ainsi que le travail du Reducer.

Pour faire cela, suivre les étapes suivantes:

- Ouvrir le fichier .bashrc


- Ajouter un nouveau raccourci de commande
run_mapreduce_combiner en copiant la fonction run_mapreduce déjà
existante. Modifier cette fonction en ajoutant juste après “-reducer $2”:

-combiner $2
- A la fin du fichier, ajouter une ligne pour l’alias:

alias hsc=run_mapreduce_combiner
- Sauvegarder le fichier, puis exécuter la commande suivante sur le
terminal, pour prendre en considération les nouvelles modifications:

source ~/.bashrc
- Désormais, pour prendre en considération le combiner, lancer la
commande hsc à la place de hs.

On désire également voir quel est le nombre d’entrée arrivant au Reducer.


Pour faire cela, il faut, après exécution du job MapReduce:

- Ouvrir un navigateur (dans votre machine virtuelle, Firefox est configuré


avec les raccourcis nécessaires)
- Taper : localhost:50030/jobtracker.jsp dans votre barre d’adresse (ou
simplement appuyer sur le lien Hadoop JobTracker dans la barre des
favoris de votre navigateur)
- Cliquer sur le job qui vient de se terminer
- Dans le tableau récapitulatif, regarder la valeur du Reduce input
records.

Page 5
TP2 : Design Patterns dans Hadoop

Activité 5.

- Créer un programme MapReduce permettant de calculer la somme


des ventes par jour de la semaine.
- Lancer ce job d’abord sans combiner, puis avec combiner. Retenez à
chaque fois:
o La somme des ventes le dimanche
o La valeur du Reduce Input Records.

IV. Homework
On se propose de réaliser une application mettant en oeuvre le patron de
conception structurel. Pour cela, nous allons réaliser la jointure de deux
ensembles de données: les fichiers délimités forum_nodes et forum_users.

Le fichier forum_nodes contient des informations sur les posts du forum, alors
que forum_users contient des informations sur les utilisateurs. Ils ont une clef en
commun (author_id dans le fichier forum_nodes et user_ptr_id dans
forum_users).

Créer un job MapReduce permettant de donner, pour chaque post, les


données suivantes:

"id" "title" "tagnames" "author_id" "node_type" "parent_id" "abs_parent_id"


"added_at" "score" "reputation" "gold" "silver" "bronze"

Quelle est la réputation de l’auteur du post dont l’identifiant est 100002517 ?

Page 6

Vous aimerez peut-être aussi