(noté) - 24/11/2014 (PDF, 236KB)

Download Report

Transcript (noté) - 24/11/2014 (PDF, 236KB)

Hadoop / Big Data
Benjamin Renaut <[email protected]>
MBDS
2014 - 2015
TP 3 – TP noté
Méthodologie Map/Reduce - programmation Hadoop - Sqoop
Préparation du TP
1
●
Importer la machine virtuelle .ova du TP.
Il s'agit d'un système GNU/Linux Debian, amd64.
●
Il ne s'agit pas de la même machine virtuelle que précédemment.
●
Démarrer la machine virtuelle.
●
S'identifier avec le login: hadoop, mot de passe: mbds.
●
Démarrer Hadoop avec les commandes:
start-dfs.sh &
start-yarn.sh &
(ignorer les warnings)
Préparation du TP
2
●
Vérifier le bon fonctionnement de Hadoop en exécutant la commande:
hdfs dfsadmin -report
La commande vérifie le statut de HDFS. Elle devrait afficher:
Datanodes available: 1 (1 total, 0 dead)
Objectifs
3
●
●
●
Ce TP est noté. Il peut être effectué seul ou en groupe (au
maximum 4 personnes).
Merci d'envoyer la constitution de vos groupes à l'adresse:
[email protected].
Le TP constitue une mise en situation; il vise à évaluer votre
compréhension et votre maîtrise de la méthodologie
map/reduce, de Hadoop, et de l'outil additionnel Sqoop dans un
exemple applicatif « réaliste ».
Objectifs
4
●
●
●
On imagine qu'une entreprise (à titre d'exemple, Microsoft) souhaite
connaître les tendances d'opinion la concernant en analysant les
tweets la concernant: ceux contenant le hashtag #Microsoft.
Une tâche automatisée importe régulièrement ces tweets au sein d'une
base de données MySQL, dans une table tweets.
Par ailleurs, un formulaire a été mis en place permettant de
sélectionner une période de temps. Ce formulaire produit deux ids
numériques: id_min et id_max, correspondant à la clef primaire id du
premier tweet à analyser et à celle du dernier tweet à analyser, au sein
de la table de la base MySQL.
Objectifs
5
●
Vous avez pour tâche de développer un script qui va:
●
●
●
●
●
Recevoir les valeurs id_min et id_max.
Exécuter un import Sqoop pour récupérer les tweets correspondant
à ces valeurs depuis la base MySQL dans HDFS.
Exécuter un programme Hadoop map/reduce analysant les tweets
ainsi importés pour déterminer une mesure d'opinion basique.
Exécuter un export Sqoop pour exporter les résultats de l'analyse au
sein d'une seconde table results dans la même base de données.
Vous devez également développer le programme Hadoop map/reduce
en question.
Objectifs
6
Informations
7
●
●
●
●
Vous n'avez pas à développer le formulaire de sélection de la période de
temps.
Il n'est pas nécessaire non plus de s'occuper de la partie
installation/alimentation de la base de données.
On imagine donc que votre tâche débute à la réception des deux identifiants
id_min et id_max; dans cette mise en situation, ils seraient typiquement
passés à votre application par le formulaire en question (via un appel au
script).
Le développement du script d'exécution lui-même est optionnel (pour des
points bonus en plus); votre tâche consiste à développer le programme
map/reduce, et à créer deux commandes Sqoop lui correspondant: une pour
l'import des tweets sur HDFS et l'autre pour l'export des résultats sur MySQL.
Machine virtuelle
8
●
●
La machine virtuelle associée au TP contient d'ores et déjà: Hadoop/HDFS, la
base de données MySQL, Sqoop, et les données relatives au TP lui-même.
Deux tunnels devraient normalement déjà être configurés sur la machine
virtuelle:
●
●
Le premier pour SSH, sur le port 2222. Il vous est ainsi possible d'accéder à
la console via PuTTY/autre client SSH en vous connectant sur
127.0.0.1:2222.
Le second pour un serveur web tournant également sur la machine, sur le
port 8888. Son but essentiel est de vous permettre d'accéder à une interface
PHPMyAdmin si vous le souhaitez, à l'adresse:
http://127.0.0.1:8888/phpmyadmin/
Machine virtuelle
9
●
Les informations de connexion à la base de données MySQL:
●
●
●
●
●
Serveur: localhost
Login: hadoop
Mot de passe: mbds
Base de données: hadoop
Vous pouvez accéder à la base pour analyser la structure des tables par le
biais de PHPMyAdmin (voir slide précédente), ou simplement depuis la
console par le biais du client MySQL CLI, avec la commande:
mysql -u hadoop -pmbds hadoop
(tapez ensuite vos requêtes, par exemple « desc tweets; ».
Machine virtuelle
10
●
●
Toutes les commandes sont à taper via l'utilisateur système hadoop.
Au sein du répertoire home de cet utilisateur (/home/hadoop), un répertoire
big_data_hadoop_tp_3 contient les fichiers suivants:
●
●
●
●
wordlist_bad.txt: les mot-clefs désignant un tweet comme « négatif ».
wordlist_good.txt: les mot-clefs désignant un tweet comme « positif ».
tweets_import.sql: les requêtes ayant permis de créer la base de données
(normalement, n'est pas utile).
examples/: les codes sources des programmes Anagrammes et
WordCount des précédents TPs pour vous aider si nécessaire; également
présents sous forme déjà compilée.
Analyse d'opinion
11
●
Votre tâche map/reduce doit analyser les tweets et en sortir quatre compteurs:
●
●
●
●
●
●
Un nombre de tweets négatifs.
Un nombre de tweets positifs.
Un nombre de tweets inconcluants.
Un nombre de tweets neutres.
Comme indiqué plus haut, on se sert d'une liste de mot-clefs pour déterminer
si un tweet est positif ou négatif. Il s'agit évidemment là d'une approche
basique (qui ne suffirait pas dans un cas réel), mais elle suffit dans le cadre de
ce TP.
De même, la quantité de tweets est faible (< 500), là aussi pour des raisons de
simplicité et de rapidité d'exécution.
Analyse d'opinion
12
●
Un tweet doit être considéré comme:
●
●
●
●
●
Positif s'il contient au moins un mot clef de la liste des mot-clefs positifs
(wordlist_good.txt), et aucun de la liste des mot-clefs négatifs.
Négatif s'il contient au moins un mot clef de la liste des mot-clefs négatifs
(wordlist_bad.txt), et aucun de la liste des mot-clefs positifs.
Inconcluant s'il contient au moins un mot des deux listes, positives et
négatives (par exemple « excellent » et « lamentable »).
Neutre s'il ne contient aucun mot d'aucune des deux listes négatives et
positives.
Il n'est pas nécessaire de retenir quels sont les mots rencontrés; on cherche
uniquement à l'issue du programme map/reduce à avoir les quatres compteurs
déjà mentionnés précédemment, et à les importer dans la table results.
Structure des tables
13
●
La table finale results est constituée de deux champs:
●
●
●
opinion, un champs texte qui doit prendre pour valeur « positif »,
« negatif », « neutre » ou « inconcluant ».
amount, un champs numérique qui doit prendre pour valeur le compteur
correspondant.
La table d'entrée tweets est constituée de quatre champs:
●
●
●
●
id, une clef unique numérique (sur laquelle s'applique la restriction
id_min/id_max).
author, un champs texte contenant l'auteur du tweet.
tweet, un champs texte contenant le tweet lui-même.
postdate, un champs texte contenant la date où le tweet a été posté.
Rendu du TP
14
●
A l'issu du TP, vous devrez rendre:
●
●
●
●
●
●
Le code source de votre programme Hadoop map/reduce, en Java ou autre
langage de programmation (via l'utilitaire streaming).
Les deux commandes Sqoop d'import des données initiales et d'export
des résultats.
D'éventuelles remarques associées à leur exécution si nécessaire.
Pour avoir tous les points, votre programme devra s'exécuter et effectuer le
travail demandé.
Pour des points en plus, vous pouvez également développer le script bash
permettant l'automatisation de l'exécution de toutes ces étapes (voir plus loin).
Rendez votre travail par e-mail ([email protected]).
Remarques
15
●
●
●
●
Lors de l'analyse des tweets, pensez à d'éventuelles contraintes liées aux
espaces / délimiteurs de mots.
Tous les champs de la base d'entrée ne sont pas forcément à utiliser ! Vous
pouvez filtrer ceux qui ne vous intéressent pas via l'import Sqoop, ou bien au
sein de votre programme map/reduce (la première solution est recommandée).
Pour vous aider, inspirez-vous des exemples des TPs précédents.
Vous avez évidemment le droit de consulter toute documentation utile en
ligne; notamment pour ce qui touche au parsing de chaîne de caractères en
Java (analyse des tweets).
Remarques
16
●
Si vous ne souhaitez pas utiliser la machine virtuelle mais votre propre machine,
une archive contenant les fichiers du répertoire big_data_hadoop_tp_3 est
disponible à l'adresse:
http://cours.tokidev.fr/bigdata/tp/big_data_hadoop_tp_3.zip
●
Rappel: pour compiler votre programme, deux possibilités:
●
●
Via Eclipse/Netbeans (pensez à inclure les librairies Hadoop).
Manuellement, en faisant par exemple (ajustez le nom du package en
conséquence):
javac *.java
mkdir -p org/mbds/hadoop/tp3
mv *.class org/mbds/hadoop/tp3
jar -cvf mbds_tp3.jar -C . org
Bonus: script d'automatisation
17
●
●
Pour (quelques) points en plus, rédigez un petit script bash qui
automatise toutes ces opérations.
Il devra prendre deux arguments: id_min et id_max (accessible dans
bash via les variables $1 et $2), de sorte qu'en appelant par exemple:
./opinion.sh 20 200
… toutes les opérations s'exécutent pour les tweets entre 20 et 200 et
les résultats finaux soient importés au sein de la table results.