0% ont trouvé ce document utile (0 vote)
105 vues5 pages

TP Hadoop: MapReduce et Python

Transféré par

ADAM hassouni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
105 vues5 pages

TP Hadoop: MapReduce et Python

Transféré par

ADAM hassouni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

BIG DATA ANNÉE UNIVERSITAIRE 2024-2025

TP2:Programmation avec l’API


Mapreduce
L’objectif de ce TP est de :
 Lancer le cluster hadoop
 s’initier à la programmation avec mapreduce

1. démarrer le cluster hadoop


 Démarrer les trois containers arrêtés précédemment
docker start haoop-master hadoop-slave1 hadoop-slave2

 A la fin du démarrage, vérifier si les interfaces web correspondantes ont démarré


correctement. Pour ce faire Dans un navigateur, entrer les adresses :
[Link]
L’interface utilisateur ressource manager permet de surveiller et de gérer votre cluster Yarn
[Link]
l'interface utilisateur Web NameNode permet d’accéder aux informations de votre cluster hadoop (le
nombre de nœuds, espace de stockage, le contenu du système de fichiers HDFS)
L’objectif de ce TP est de simuler l’exemple wordcount vu dans le cours
2. classe Mapper
Créer une première classe Mapper
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];

public class TokenizerMapper extends Mapper<Object, Text,


Text, IntWritable>{
private final static IntWritable one = new
IntWritable(1);
private Text word = new Text();

public void map(Object key, Text value, Context context)


throws IOException, InterruptedException {
[Link]([Link]());

YASSER EL MADANI EL ALAMI 1


BIG DATA ANNÉE UNIVERSITAIRE 2024-2025

StringTokenizer itr = new


StringTokenizer([Link]());
while ([Link]()) {
[Link]([Link]());
[Link](word, one);
}
}
}
3. classe reducer
Créer une la classe reducer
package [Link];
import [Link];

import [Link];
import [Link];
import [Link];

public class IntSumReducer extends


Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable>


values, Context context) throws IOException,
InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += [Link]();
}
[Link](sum);
[Link](key, result);
}
}

4. classe Principale
Créer une la classe qui permettra de lancer le job
package [Link];

import [Link];

import [Link];
import [Link];
import [Link];

YASSER EL MADANI EL ALAMI 2


BIG DATA ANNÉE UNIVERSITAIRE 2024-2025

import [Link];
import [Link];
import [Link];
import
[Link];

public class WordCount {

public static void main(String[] args) throws Exception {


// TODO Auto-generated method stub
Configuration conf = new Configuration();
Job job = [Link](conf, "word count");

// classe principale
[Link]([Link]);

// classe qui fait le map


[Link]([Link]);

// classe qui fait le shuffling et le reduce


[Link]([Link]);
[Link]([Link]);

[Link]([Link]);
[Link]([Link]);

// spécifier le fichier d'entrée


[Link](job, new Path(args[0]));

// spécifier le fichier contenant le résultat


[Link](job, new
Path(args[1]));
[Link]([Link](true) ? 0 : 1);
}
}
 Créer un fichier jar que vous allez nommer [Link]
 Copier le jar créé vers le dossier de partage /hadoop_project
 sur l’invité de commande shell de votre container lancer la commande

5. MapReduce avec python


.L’objectif est d’implémenter le fameux exemple wordcount à base de mapreduce en python et
de l’utilitaire hadoop streaming. pour ce faire :

YASSER EL MADANI EL ALAMI 3


BIG DATA ANNÉE UNIVERSITAIRE 2024-2025

 Écrire le mapper qui implémente la logique map. Il lira les données de STDIN et
divisera les lignes en mots, et générera une sortie de chaque mot avec une occurrence
égale à 1

#!/usr/bin/env python
import sys
# input comes from standard input STDIN
for line in [Link]:
line = [Link]() #remove leading and trailing whitespaces
words = [Link]() #split the line into words and returns as a list
for word in words:
#write the results to standard output STDOUT

print'%s\t%s' % (word,1) #print the results

 Vous pouvez tester le [Link] sur votre machine


cat [Link] | python [Link]

 Écrire le fichier [Link] qui implémente la logique reduce. Il lira la sortie de


[Link] à partir de l’entrée standard et agrégera l'occurrence de chaque mot et
écrira la sortie finale sur STDOUT

#!/usr/bin/env python
from operator import itemgetter
import sys

current_word = None
current_count = 0
word = None

for line in [Link]:


line = [Link]() # remove leading and trailing whitespace
# splitting the data on the basis of tab provided in [Link]
word, count = [Link]('\t', 1)
# convert count (currently a string) to int
try:
count = int(count)
except ValueError:# ignore/discard this line if count is not a number
continue

# Hadoop sorts map output by key (word) before it is passed to the reducer
if current_word == word:
current_count += count
else:
if current_word:
# write result to STDOUT
print '%s \t %s' % (current_word, current_count)
current_count = count
current_word = word

# output the last word

YASSER EL MADANI EL ALAMI 4


BIG DATA ANNÉE UNIVERSITAIRE 2024-2025

if current_word == word:
print '%s\t%s' % (current_word, current_count)

 Vérifier si le reducer fonctionne correctement

cat [Link] | python [Link] | sort -k1,1 | python [Link]


 pour exécuter le [Link] et [Link],
1. ouvrir le terminal du container master

2. localiser le fichier JAR de l’utilitaire hadoop streaming.


find / -name 'hadoop-streaming*.jar'

Le chemin devrait ressembler à PATH/[Link]


/opt/hadoop-3.2.1/share/hadoop/tools/lib/[Link]

3. finalement exécuter le programme map/reduce avec la commande suivante


hadoop jar /opt/hadoop-3.2.1/share/hadoop/tools/lib/hadoop-streaming-
[Link] \
-file chemin/[Link] -mapper [Link] \
-file chemin/[Link] -reducer [Link] \
-input chemin/input -output chemin/output
3. sortir du bash hadoop-master
4. arrêter les containers

YASSER EL MADANI EL ALAMI 5

Vous aimerez peut-être aussi