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 à MapReduceApache Hadoop MapReduce
Charly CLAIRMONTAltic - http://[email protected]@egwada
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
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)
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|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|Value
Entées
Key|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|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
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
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|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|ValueKey|Value
Entées
Exécution de l'algorithme sur chaque ligne séquentiellement
Map(K1 key, V1 val, OutputCollector<K2, V2> output,
Reporter reporter)
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)
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
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
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)
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 »
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 implementsMapper<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);
}}
}
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 implementsReducer<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));}
}
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);}
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 CLAIRMONTAltic - http://[email protected]@egwada