1. 1 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
TP 1 - Big Data
Programmation Hadoop
Introduction
Dans ce TP, nous manipulerons l’exemple « Word Count » ou « Compteur d’occurrence de
mots » vu en cours, en premier lieu sur la machine virtuelle Apache Hadoop (installée par
l’étudiant) puis sur la machine virtuelle Cloudera.
A. Manipulation sur la VM Apache Hadoop
I. Préparation du TD
1. Démarrer la machine virtuelle.
2. Démarrer les services de Hadoop avec les commandes :
$ start-dfs.sh
$ start-yarn.sh
3. Vérifier le bon fonctionnement de Hadoop. Utiliser l'outil jps pour lister les processus
Java en cours d'exécution :
$ jps
3631 Jps
3336 NodeManager
3212 ResourceManager
3651 NameNode
2863 DataNode
3052 SecondaryNameNode
4. Vérifier que l'environnement de compilation est fonctionnel.
(Vérifier que Java est bien installé sur votre machine « java –version »).
2. 2 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
5. Exécuter la commande suivante (sur la même ligne) :
$ wget --no-check-certificate
'https://docs.google.com/uc?export=download&id=0B4fI_1marvB
ZZFYwVm5aYmZ1LUU' -O td1_bigdata_enis.zip
La commande va télécharger une archive contenant :
- Le poème ayant servi d'exemple en cours.
- Le code d'exemple du cours (classes Driver, Map et Reduce).
- Un script permettant la mise en place simplifiée de l'environnement de compilation.
Vous pouvez la télécharger directement via le lien : https://goo.gl/jiuFnF
6. Décompresser l'archive :
$ unzip td1_bigdata_enis.zip
II. Manipulation de l’exemple
Nous allons maintenant compiler le code d'exemple Java du cours (compteur d’occurrence de
mots).
1. Changer le répertoire courant :
$ cd td1_bigdata_enis
2. Compiler le programme Hadoop (le tout sur la même ligne) :
$ javac -classpath
"/usr/local/hadoop/share/hadoop/common/hadoop-common-
2.7.4.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-
mapreduce-client-common-
2.7.4.jar:/usr/local/hadoop/share/hadoop/common/lib/commons
-cli-
1.2.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-
mapreduce-client-core-2.7.4.jar" WCount*java
La compilation a généré trois fichiers .class: un pour chacune de nos classes (driver, map
et reduce).
3. 3 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
3. On va désormais packager le programme d'exemple au sein d'un fichier .jar. Créer
l'arborescence liée au nom du package avec la commande :
$ mkdir -p enis/hadoop/wordcount
Et déplacer, par la suite, les fichiers compilés au sein de cette arborescence :
$ mv *.class enis/hadoop/wordcount
4. Générer le .jar :
$ jar -cvf enis_wcount.jar -C . enis
5. En préparation de l'exécution de notre programme Hadoop, nous allons maintenant
déplacer le texte du poème sur HDFS. Exécuter la commande :
$ hadoop fs -put poeme.txt /
et vérifier sa présence avec la commande :
$ hadoop fs -ls /
6. Enfin, exécuter notre programme Hadoop avec la commande :
$ hadoop jar enis_wcount.jar enis.hadoop.wordcount.WCount /poeme.txt /results
La commande devrait prendre tout au plus quelques secondes à s'exécuter.
Si tout s'est passé correctement, un message « mapreduce.Job: map 100% reduce
100% » devrait s'afficher.
7. Vérifier la présence des fichiers de résultats dans le répertoire /results avec la commande :
$ hadoop fs -ls /results
(un fichier _SUCCESS devrait être présent, ainsi qu'un fichier part-r-00000).
8. Enfin, afficher les résultats finaux avec la commande :
$ hadoop fs -cat /results/part-r-00000
4. 4 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
Le mot « qui » devrait être le plus présent au sein de la poème (25 occurrences).
Consultez la figure 1 ci-dessous.
Figure 1. Résultat
5. 5 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
B. Manipulation sur la VM Cloudera
Cloudera propose une solution clé en main – gratuite – permettant de bénéficier d’une
configuration Hadoop fonctionnelle sous une nouvelle machine virtuelle invitée de VirtualBox
(ou autre, ex. VMWare). Dans le cadre de ce TP, nous utiliserons la distribution cloudera basée
sur le système d’exploitation CentOs (une machine virtuelle « All-in-One ») et comprenant un
cluster Hadoop simple noeud. Dans cette VM plusieurs composantes ont été pré-installé (Spark,
Hive, Zeppelin, etc.)
Installer VirtualBox (https://www.virtualbox.org/) si ce n’est pas déjà fait.
Importer la machine virtuelle cloudera-BigData.ova du TP.
Démarrer la machine virtuelle.
Depuis le terminal. Exécuter la commande suivante pour transformer le clavier en azerty
$ setxkbmap fr
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:
Live datanodes (1) :
Vérifier la version d’Hadoop en exécutant la commande:
$ hadoop version
A partir d’un navigateur web, le lien suivant http://localhost:50070/ vous permettra
d’accéder à l’interface Web du noeud maître (NameNode)
Nous allons maintenant compiler le code d'exemple Java du cours (compteur d’occurrence
de mots).
Objectif: vérifier que l'environnement de compilation soit fonctionnel et que Hadoop soit
correctement à même d'exécuter des tâches, et se familiariser avec le processus de
compilation.
6. 6 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
Télécharger l’archive du projet maven WordCount.zip (lien: https://goo.gl/Ff6csj) :
Cette archive contient :
o Le poème ayant servi d'exemple en cours dans le dossier data.
o Le code d'exemple du cours (classes driver, map et reduce).
Décompresser l'archive
On va désormais packager le programme d'exemple au sein d'un fichier .jar. Créer
l'arborescence liée au nom du package avec la commande:
(Attention : cette commande ne pourra fonctionner que si vous la lancez depuis le même
dossier contenant le fichier pom.xml: $ cd WordCount/WordCount )
$ mvn clean package
En préparation de l'exécution du programme Hadoop, nous allons en premier temps créer
dans le disque HDFS un dossier pour ce TP. Vous allez travailler dans la suite du TP dans
un dossier nom.de.votre.dossier (à fixer) sur la racine du disque HDFS (Attention : le
dossier nom.de.votre.dossier n’existe pas). On va créer dedans un dossier wordcount en
exécutant la commande suivante :
$ hadoop fs -mkdir -p /nom.de.votre.dossier/wordcount
Maintenant il faut déplacer le texte du poème du dossier data sur le disque HDFS dans le
dossier créé. Exécuter la commande :
$ hadoop fs -put data/poeme.txt /nom.de.votre.dossier/wordcount
et vérifier sa présence avec la commande :
$ hadoop fs -ls /nom.de.votre.dossier/wordcount
ou directement via l’interface Web (Hue - Hadoop User Experience)
http://quickstart.cloudera:8888/filebrowser/view/user/cloudera#/
Enfin, exécuter votre programme Hadoop avec la commande ci-dessous sur la même
ligne : (Attention : le jar créé est dans le dossier target: $ cd target)
$ hadoop jar WordCount-1.0-SNAPSHOT.jar WCount
/nom.de.votre.dossier/wordcount/poeme.txt
/nom.de.votre.dossier/resultat_wordcount
7. 7 ENIS – GI 3 – 2017/2018 Mme. Amal ABID
La commande devrait prendre tout au plus quelques secondes à s'exécuter.
Si tout s'est passé correctement, un message «mapreduce.Job: map 100% reduce
100%» devrait s'afficher.
Vérifier la présence des fichiers de résultats dans le répertoire /resultat_wordcount avec
la commande:
$ hadoop fs -ls /nom.de.votre.dossier/resultat_wordcount
ou directement via Hue
(un fichier _SUCCESS devrait être présent, ainsi qu'un fichier part-r-00000).
Enfin, afficher les résultats finaux avec la commande:
$ hadoop fs -cat /nom.de.votre.dossier/resultat_wordcount/part-r-00000
ou directement via Hue
Le mot « qui » devrait être le plus présent au sein du poème avec 25 occurrence
(Fig2).
Figure 2. Résultat