Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Une introduction à MapReduce
1. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation
Commerciale - Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
HUG France SL2013 – Mai 2013
Introduction à MapReduce
Apache Hadoop MapReduce
Charly CLAIRMONT
Altic - http://altic.org
charly.clairmont@altic.org
@egwada
2. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Motivations
● Traiter de larges jeux de données
● Traiter de larges volumes de données
● Utiliser 1000 CPU
● Sans le tracas de la gestion de la parallélisation /
synchronisation
● Tolérance à la panne
3. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Architecture basique
Input
Format
Map Sort Reduce Output
Format
Node Node
Partitioner
MapReduce
HDFS
(Distributed File System)
4. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
MapReduce, pour mieux comprendre
Map Reduce
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Entées
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Intermédiaire
Key|Value,
Key|Value,
Key|Value,
Key|Value
Résultat
= un type de collection
Key|Value,
Key|Value,
Key|Value
Key|Value,
Key|Value
5. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
MapReduce, Entrées (Input)
● Détermine la façon dont les données sont fractionnées
● Crée des tableaux d' InputSplit[]
● Chaque tableau est un map
● Associé à une liste d'emplacement de nœuds
● RecordReader
● Crée des paires clé-valeur
● Conversion des types de données
6. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Mapreduce, Map
● Agit individuellement sur chaque data set
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Key|Value
Entées
Exécution de l'algorithme sur chaque ligne séquentiellement
Map(
K1 key,
V1 val,
OutputCollector<K2, V2> output,
Reporter reporter
)
7. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
MapReduce, Partitionner
● Distribue les paires clés-valeurs
● Décide vers du Reducer cible
● grâce à la clé
– exploite
● une fonction de hachage par défaut
● ou une fonction personnalisée
getPartition(K2 key, V2 value, int numPartitions)
8. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
MapReduce, Shuffle
Map
Map
Map
Reduce
Reduce
HTTP
9. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
MapReduce, Sort
● Garantie que les entrées sont triées
● Étape finale du Shuffle
● Aide à la fusion des entrées du Reducer
10. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
MapReduce, Reduce
● Reçoit les sortie depuis beaucoup de Mappers
● Consolide les valeurs pour les clés intermédiaires
● Regroupe les valeurs selon les clés
Reduce(
K2 key,
Iterator<V2> values,
OutputCollector<K3,V3> output,
Reporter reporter
)
11. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Mapreduce, Sorties (Output)
● Valide
● par rapport à la sortie attendue
● Créer un RecordWriter
● qui écrit sur HDFS
● organise la sortie en fichiers « morceau-0000x »
12. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Exemple de programme MapReduce, Map
/**
* Une classe Map qui lit les fichiers à traiter
*/
public static class MapClass extends MapReduceBase implements
Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
String line = value.toString();
StringTokenizer itr = new StringTokenizer(line);
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
output.collect(word, one);
}
}
}
13. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Exemple de programme MapReduce, Reduce
/**
* Une classe Reduce qui compte chaque mot
*/
public static class Reduce extends MapReduceBase implements
Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
14. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale
- Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
Exemple de programme MapReduce, le Job
/**
* Le composant Driver indique à Hadoop d'exécuter le job à partir des
deux composants (classes) précédement définies
*/
public void run(String inputPath, String outputPath) throws Exception {
JobConf conf = new JobConf(WordCount.class);
conf.setJobName("wordcount");
// the keys are words (strings)
conf.setOutputKeyClass(Text.class);
// the values are counts (ints)
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(MapClass.class);
conf.setReducerClass(Reduce.class);
FileInputFormat .addInputPath(conf, new Path(inputPath));
FileOutputFormat .setOutputPath(conf, new Path(outputPath));
JobClient.runJob(conf);
}
15. Ce support est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation
Commerciale - Pas de Modification 2.0 France. - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
HUG France SL2013 – Mai 2013
Introduction à MapReduce
Merci !
Charly CLAIRMONT
Altic - http://altic.org
charly.clairmont@altic.org
@egwada