Professional Documents
Culture Documents
Map Reduce
Map Reduce
• Mais permet
✦ parallélisation automatique
✦ de l'équilibrage de charge
✦ des optimisations sur les transferts disques et réseaux
✦ de la tolérance aux pannes
Schéma général
la 1 la 3
la
la ville de la de 1 1 1 1
région .... Map la
ville 1
ville 1 ville 1
1
Sort
... Reduce
...
... vieux k2 v2
village ... Map k1 v1
... la k4 v5
médaille ... Map k3 v1
Colmar : F2
Nantes : F1
F1 : Strasbourg Nantes Paris
Mulhouse: F2
F2 : Mulhouse Colmar Strasbourg
Paris : F1
Strasbourg : F1 F2
Pseudo-code
index renversé
Map(String filename, String line) :
foreach word w in line:
EmitIntermediate( w, filename );
foreach f in intermediate_values:
result += f + ‘ ‘;
while (itr.hasMoreTokens()) {
context.write(new Text(itr.nextToken(), IntWritable(1));
}
}
}
s t raite M a p p e r
in sta n ce la c la ss e ab
On écrit une ) e nt ré e e t so r t ie
o n n ant le t yp e d e (k,v
en d
(k,v) entrée: On recevra l’offset dans le fic
hier (un long )
et un morceau des données
public static class TokenizerMapper
extends Mapper<LongWritable, Text, Text, IntWritable>{
while (itr.hasMoreTokens()) {
context.write(new Text(itr.nextToken(), IntWritable(1));
}
} par défaut, 1 ligne de fichier
}
emit(key,val)
(k,v) sortie: on sort une (k,v) composée
d’un mot et de la valeur 1
wc avec Hadoop
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
Structure Clas
se in
de M terne h
re dé ap éri
finit per don tant
public class WordCount { la fo t on
nctio
n ma
public static class TokenizerMapper
p
extends Mapper<LongWritable, Text, Text, IntWritable>{
}
}
A Hadoop-specific high-
SequenceFileInputFormat user-defined user-defined
performance binary format
Example OutputFormats
InputFormat Description
SequenceFileOutputFormat Writes binary files suitable for reading into subsequent MapReduce jobs
Primitive Description
job.setOutputKeyClass Set the format of the output key for both the mapper and reducer
job.setOutputValueClass Set the format of the output value for both the mapper and reducer
job.setMapOutputKeyClass Set the format of the output key for the mapper
job.setMapOutputValueClass Set the format of the output value for the mapper
Compiling and Running
(Single Node Setup, Hadoop >= 2.4.x)
• Make a JAR
jar -cvf wc.jar *.class
• Run
hadoop jar wc.jar WordCount input output
Compiling and Running in J3
(Single Node Setup, hadoop-2.7.1)
• Make a JAR
jar -cvf wc.jar *.class
• Run
hadoop jar wc.jar WordCount input output
Schéma général d’exécution
Système de fichiers
• Caractéristiques:
• non-posix,
• write-once, read-many
n Pour
les grands graphes représentant la plupart des
phénomènes réels, les matrice d’adjacence sont
creuses (presque que des 0, lignes inutilement
longues).
Problème: soit la liste des arrêtes d’un graphe exprimées par des relation
binaires: (A,B) pour une relation non-orientée entre sommets A et B.
Etablir pour chaque arrête, le degré de chacun des deux sommets de la
relation.
(A,B) (A,B),d(A)=3,d(B)=2
(A,C) (A,C),d(A)=3,d(C)=1
(B,D) (B,D),d(B)=2,d(D)=2
(A,D) (A,D),d(A)=3,d(D)=2
Exemple : degrés des sommets
Nécessite 2 passes:
Map1 : éclater les 2 sommets
A (A,B) R3 (B,D)
R1 (A,B) B (A,B)
R4 (A,D)
A (A,C)
R2 (A,C) C (A,C)
Passe 2:
Map2 : identité (quand appariement map et reduce obligatoire comme avec Hadoop)
(A,B) d(B)=2
(A,D) d(D)=2
...
Plus court Chemin
A
1
Formulation du problème 3 4 D
C
• Un noeud initial est donné (ici A) B 3 1
• On connait les distances de voisin à voisin
2 F
• On veut connaître la distance minimum reliant E
le noeud initial à tous les autres noeuds.
5
3
G
Algorithme de Dikjstra
• S : ensemble des sommets, /* initialization */
• s0 : sommet initial forall s ∈ S
• neigbhor(a) rend l’ensemble des D[i] <- infinity
sommets connectés à un sommet a, D[s0] = 0
autres sommets (le résultat) D[b] <- min ( D[b] , D[a] + dist(a,b))
endfor
enddo
A
1
✦ Parcours en largeur: à 3 4 D
partir d’un sommet, on
examine d’abord tous les C
voisins. B 3 1
✦ Dans le cas d’un graphe,
nécessité de colorer les 2 F
E
sommets pour l’arrêt.
5
3
G
A
1
3 4 D
✦ Parcours en largeur: à partir
d’un sommet, on examine C
d’abord tous les voisins. B 3 1
✦ Il faut n itérations, n diamètre
du graphe. 2 F
E
✦ Problème de l’arrêt.
5
3
G
A
1
3 4 D
✦ Parcours en largeur: à partir
d’un sommet, on examine C
d’abord tous les voisins. B 3 1
✦ Il faut n itérations, n diamètre
du graphe. 2 F
E
✦ Problème de l’arrêt.
5
3
G
A
1
3 4 D
✦ Parcours en largeur: à partir
d’un sommet, on examine C
d’abord tous les voisins. B 3 1
✦ Il faut n itérations, n diamètre
du graphe. 2 F
E
✦ Problème de l’arrêt.
5
3
G
A
3 1
4
B C D
2 5 1
E G F
3 3
G C
5
G
Problème de l’arrêt
• Idées possibles:
• Nombre connu d’itérations (diamètre du graphe)
B 3 , {}
Reduce
B 3 , {E}
A C 4 , {} C 4 , {G}
1 D 1, {} D 1, {F}
3 4 D B inf, {E} E inf, {G}
C
C inf, {G} F inf, {C}
B 3 1 D inf, {F}
E inf, {G}
2 F F inf, {C}
E
5
3 passe 1
G
Le deuxième map génère de nouvelles clés ‘sommet’ en
substituant
(clé,(d,{succ1,succ2,...}))
par
[(succ1,(d+dist(clé,succ1),{});
(succ2,(d+dist(clé,succ2),{}); ...]
A
1 B 3 , {E} E 5 , {}
3 4 D C 4 , {G} G 9 , {}
C D 1, {F}
Map
F 2, {}
B 3 1 ...
2 F
E
5
3 passe 2
G
On réduit en prenant pour une même clé, la distance minimum
A
1
3 4 D
C
B 3 1 E 5 , {G}
Map
G 8 , {}
2 ...
E F
5
3 passe 3
G
On réduit en prenant pour une même clé, la distance minimum
A E 5 , {G} G 8 , {}
1 Map
4 ...
3 D
C C 5 , {G}
Map
G 10 , {}
B 3 1
2 F
E
Reduce
5 G 8 , {}
3
G passe 4
Input File Format
% cat inputSP
A 0 B,3;C,4;D,1
B 999 E,2;
C 999 G,5;
D 999 F,1;
E 999 G,3;
F 999 C,1;
G 999 {}
Produit de matrices
A B C
a11 a12 a13 b11 c11
* b21 =
b31
on lit : b11, b12, b13 emit(c11, b11); emit(c21, b11); emit(c31, b11)
...
on lit : b21, b22, b23 emit(c11, b21); emit(c21, b21); emit(c31, b21)
...
Produit de matrices
Problème : reduce récupère les valeurs nécessaires pour calculer
un cij mais dans un ordre quelconque.
Exemple :
Exemple : match !
... match !
c21 (b11,1);(b21,2);(a12,1);(a22,2);(b31,3);(a23,2)
Input File Format
% cat matrices.in.dat
A : [0 1 2 3 4] [5 6 7 8 9]
B : [0 1 2] [3 4 5] [6 7 8] [9 10 11] [12 13 14]
• K-means :
1. prendre au hasard k points initiaux, désignés comme «centres».
2. pour chaque point, définir quel est le centre le plus proche. Le
point rejoint le groupe associé au centre.
3. pour chaque groupe, définir un nouveau centre, barycentre des
points appartenant au groupe.
4. Recommencer l’étape 2. Si aucun point ne change de groupe, fin de
l’algorithme, sinon recommencer à l’étape 3.