Cloud Computing MapReduce Année académique 2014/15



Documents pareils
Notes de cours Practical BigData

7 Développement d une application de MapReduce

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

Certificat Big Data - Master MAthématiques

Introduc)on à Map- Reduce. Vincent Leroy

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Introduction à MapReduce/Hadoop et Spark

Introduction à Hadoop & MapReduce

Map-Reduce : un cadre de programmation parallèlle pour l analyse de grandes données. Stéphane Genaud ENSIIE

Programmation parallèle et distribuée (Master 1 Info )

Programmation parallèle et distribuée

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Hadoop / Big Data MBDS. Benjamin Renaut <renaut.benjamin@tokidev.fr>

Programmation parallèle et distribuée

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Hadoop : une plate-forme d exécution de programmes Map-Reduce

Hadoop : une plate-forme d exécution de programmes Map-Reduce

Big Data Concepts et mise en oeuvre de Hadoop

Cartographie des solutions BigData

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis


Labs Hadoop Février 2013

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin Talend

Bases de données documentaires et distribuées Cours NFE04

Formation Cloudera Data Analyst Utiliser Pig, Hive et Impala avec Hadoop

ACTIVITÉ DE PROGRAMMATION

R+Hadoop = Rhadoop* Des logiciels libres complémentaires, une implémentation, une réponse au nouveau paradigme du bigdata!

Fouillez facilement dans votre système Big Data. Olivier TAVARD

Organiser vos données - Big Data. Patrick Millart Senior Sales Consultant

BIG DATA en Sciences et Industries de l Environnement

Les enjeux du Big Data Innovation et opportunités de l'internet industriel. Datasio 2013

Ricco Rakotomalala R.R. Université Lyon 2

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

AVRIL Au delà de Hadoop. Panorama des solutions NoSQL

Prototypage et évaluation de performances d un service de traçabilité avec une architecture distribuée basée sur Hadoop

Anticiper et prédire les sinistres avec une approche Big Data

Déploiement d une architecture Hadoop pour analyse de flux. françois-xavier.andreu@renater.fr

Le cloud computing au service des applications cartographiques à haute disponibilité

Big Data : utilisation d un cluster Hadoop HDFS Map/Reduce HBase

Acquisition des données - Big Data. Dario VEGA Senior Sales Consultant

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

4 Exemples de problèmes MapReduce incrémentaux

Sauvegarde collaborative en pair-à-pair

CNAM Déploiement d une application avec EC2 ( Cloud Amazon ) Auteur : Thierry Kauffmann Paris, Décembre 2010

Sommaire. 3. Les grands principes de GFS L architecture L accès de fichier en lecture L accès de fichier en écriture Bilan

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

NoSQL. Introduction 1/30. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Flux de données Lecture/Ecriture Fichiers

Cours 8 Not Only SQL

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Stephan Hadinger, Sr. Mgr Solutions Architecture, AWS. Salon du Big Data 11 mars 2015

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Introduction aux algorithmes MapReduce. Mathieu Dumoulin (GRAAL), 14 Février 2014

Our experience in using Apache Giraph for computing the diameter of large graphs. Paul Bertot - Flavian Jacquot

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Plan du cours. Historique du langage Nouveautés de Java 7

RMI le langage Java XII-1 JMF

Remote Method Invocation Les classes implémentant Serializable

et Groupe Eyrolles, 2006, ISBN :

Les bases de données relationnelles

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Le BigData, aussi par et pour les PMEs

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cassandra et Spark pour gérer la musique On-line

BONJOURGRID : VERSION ORIENTÉE DONNÉE & MAPREDUCE SÉCURISÉ

Projet de programmation (IK3) : TP n 1 Correction

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Programmation par les Objets en Java

Offre formation Big Data Analytics

Benjamin Cornu Florian Joyeux. Les choses à connaître pour (essayer) de concurrencer Facebook.

BIG DATA et DONNéES SEO

Les journées SQL Server 2013

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

I. Introduction aux fonctions : les fonctions standards

Hibernate vs. le Cloud Computing

Projet de Veille Technologique

20 ans du Master SIAD de Toulouse - BigData par l exemple - Julien DULOUT - 22 mars ans du SIAD -"Big Data par l'exemple" -Julien DULOUT

Groupe de Discussion Big Data Aperçu des technologies et applications. Stéphane MOUTON

Certificat Informatique et internet Niveau 1 TD D1. Domaine 1 : Travailler dans un environnement numérique évolutif. 1. Généralités : Filière

Java Licence Professionnelle CISII,

Les technologies du Big Data

Big Data. Les problématiques liées au stockage des données et aux capacités de calcul

HADOOP ET SON ÉCOSYSTÈME

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

L écosystème Hadoop Nicolas Thiébaud Tuesday, July 2, 13

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Artica. La déduplication. Révision Du 08 Février 2011 version

Comme chaque ligne de cache a 1024 bits. Le nombre de lignes de cache contenu dans chaque ensemble est:

Corrigé des exercices sur les références

Guide de démarrage rapide

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Licences Windows Server 2012 R2 dans le cadre de la virtualisation

Chapitre 10. Les interfaces Comparable et Comparator 1

Transcription:

Cloud Computing Année académique 2014/15 Qu'est-ce que le Big Data? Source: Paul Butler (Facebook) "Visualizing Friendships", https://www.facebook.com/note.php?note_id=469716398919 2 2015 Marcel Graf

Qu'est-ce que le Big Data? Source: Weldon Cooper Center for Public Service, http://demographics.coopercenter.org/dotmap/index.html 3 Qu'est-ce que le Big Data? Source: walkingsf on Flickr "Locals (blue) and tourists (red), photo locations Paris", http://www.flickr.com/photos/walkingsf/sets/72157624209158632/ 4

Qu'est-ce que le Big Data? Source: Strava biking trails heatmap, http://labs.strava.com/heatmap 5 Qu'est-ce que le Big Data? processes 20 PB a day (2008) crawls 20B web pages a day (2012) >10 PB data, 75B DB calls per day (6/2012) 150 PB on 50k+ servers running 15k apps (6/2011) Wayback Machine: 240B web pages archived, 5 PB (1/2013) >100 PB of user data + 500 TB/day (8/2012) LHC: ~15 PB a year S3: 449B objects, peak 290k request/second (7/2011) 1T objects (6/2012) 640K ought to be enough for anybody. LSST: 6-10 PB a year (~2015) SKA: 0.3 1.5 EB per year (~2020) 6

Qu'est-ce que le Big Data? On appelle "Big Data" des données qui sont trop larges, trop complexes et trop dynamiques pour les outils conventionnels à stocker, gérer et analyser. 7 Introduction est un modèle de programmation pour le traitement des données distribué. Sa puissance est dans sa capacité de évoluer à des centaines ou milliers de machines, qui peuvent avoir plusieurs coeurs. Quelle taille aurait une tâche de calcul? Données à l'échelle web : centaines de GB à TB ou PB Une copie du Web en 2012 (Common Crawl) a 3.8G documents et une taille de > 100TB. Google travaille en interne avec des tailles > 400TB. Les données ne peuvent pas être stockées sur le disque dur d'un seul ordinateur. Donc un système de fichiers distribué est nécessaire. 8

Distribution des données dans HDFS Quand on télécharge un grand fichier sur un cluster, le fichier est distribué sur les machines du cluster. Le système de fichiers s'occupe de diviser le fichier en morceaux (chunks de 64 Mo) qui sont pris en charge par différentes machines du cluster. C'est une forme de sharding. Un grand fichier Est coupé en morceaux Et les morceaux sont distribués sur les machines du cluster Noeud HDFS 1 Noeud HDFS 2 Noeud HDFS 3 Noeud HDFS 4 (En plus les chunks sont répliqués, il existe toujours trois copies dans le cluster.) 9 Traitement des données Concept principal On veut traiter un grand volume de données qui est réparti sur plusieurs machines. Approche traditionnelle : transporter les données vers le traitement Noeud 1 Noeud 2 Noeud 3 Noeud 4 Traitement Résultat Problème : Les volumes de données ne cessent de croître rapidement. Les disques durs ont une vitesse de lecture relativement faible (actuellement ~100 Mo/seconde) La lecture d'une copie du Web (> 400 To) nécessiterait plus d'un mois! 10

Traitement des données Concept principal Approche : transporter le traitement vers les données Chaque machine qui stocke des données exécute une partie du traitement. Les résultats partiels sont collectés et agrégés. Noeud 1 Résultat Noeud 2 Noeud 3 Noeud 4 partiel Avantages Moins de déplacement de données sur le réseau. Le traitement s'effectue en parallèle sur plusieurs machines. Résultat Effectuer un traitement sur une copie du Web en utilisant 1'000 machines : < 3 heures 11 Plateforme de calcul distribué Le concept est un modèle de traitement de données simple qui s'applique à beaucoup de problèmes : Google : calculer le PageRank qui détermine la pertinence d'une page web. Last.fm : calculer les charts des chansons les plus écoutées et recommandations (musique qui pourrait te plaire). Facebook : calculer des statistiques d'utilisation (croissance des utilisateurs, pages visitées, temps passé) et recommandations (gens que tu pourrais connaitre, applications qui pourraient te plaire). Rackspace : indexation des logs d'infrastructure pour la recherche d'erreur en cas de faille.... Pour le mettre en oeuvre il faut paralleliser les tâches de calcul équilibrer la charge optimiser les transferts disque et réseau gérer les cas où une machine tombe en panne... Il faut une plateforme de calcul distribué! 12

Hadoop Introduction Hadoop est un projet Open Source Apache une plateforme de calcul distribué un framework qui permet aux développeurs d'écrire des applications qui traitent un grand volume de données. Une installation Hadoop comporte principalement un cluster de machines (physiques ou virtuelles) le système de fichiers distribué HDFS (Hadoop Distributed File System) la base de données NoSQL HBase le système de calcul distribué les applications de traitement de données écrites par le développeur. Data analysis applications HBase database Hadoop Distributed File System (HDFS) A cluster of machines 13 Les fonctions Map et Reduce Origine des termes Les termes Map et Reduce viennent du langage Lisp Quand on a une liste on peut appliquer d'un coup la même fonction à chaque élément de la liste. On obtient une autre liste. P. ex. la fonction x x 2 On peut aussi appliquer d'un coup une fonction qui réduit tous les éléments d'une liste à une valeur. P. ex. la fonction de sommation Dans Hadoop, les fonctions Map et Reduce sont plus générales. liste d'entrée fonction Map liste de sortie liste d'entrée fonction Reduce 1 2 3 4 5 6 7 8 1 4 9 16 25 36 49 64 1 2 3 4 5 6 7 8 valeur de sortie 36 14

Exemple : Traitement de données météorologiques Le National Climatic Data Center des États Unis publie des données météorologiques Captées par des dizaines de milliers de stations météorologiques Mesures : température, humidité, précipitation, vent, visibilité, pression, etc. Données historiques disponibles depuis le début des mesures météorologiques Les données sont disponibles comme fichiers texte. Exemple de fichier : 0067011990999991950051507004+68750+023550FM- 12+038299999V0203301N00671220001CN9999999N9+00001+99999999999 0043011990999991950051512004+68750+023550FM- 12+038299999V0203201N00671220001CN9999999N9+00221+99999999999 0043011990999991950051518004+68750+023550FM- 12+038299999V0203201N00261220001CN9999999N9-00111+99999999999 0043012650999991949032412004+62300+010750FM- 12+048599999V0202701N00461220001CN0500001N9+01111+99999999999 0043012650999991949032418004+62300+010750FM- 12+048599999V0202701N00461220001CN0500001N9+00781+99999999999... 15 Exemple : Traitement de données météorologiques Chaque fichier contient les mesures d'une année. Une ligne représente un ensemble d'observations d'une station à un certain moment. Exemple de ligne commenté (réparti sur plusieurs lignes pour une meilleure lisibilité) : 0057 332130 # USAF weather station identifier 99999 # WBAN weather station identifier 19500101 # observation date 0300 # observation time 4 +51317 # latitude (degrees x 1000) +028783 # longitude (degrees x 1000) FM- 12 +0171 # elevation (meters) 99999 V020 320 # wind direction (degrees) 1 # quality code N 0072 1 00450 # sky ceiling height (meters) 1 # quality code C N 010000 # visibility distance (meters) 1 # quality code N 9-0128 # air temperature (degrees Celsius x 10) 1 # quality code - 0139 # dew point temperature (degrees Celsius x 10) 1 # quality code 10268 # atmospheric pressure (hectopascals x 10) 1 # quality code Source: Tom White, Hadoop: The Definitive Guide 16

Exemple : Traitement de données météorologiques Problème posé : On veut calculer pour chaque année la température maximale observée. Approche classique Script bash / awk #!/bin/bash for year in all/* do echo - ne $(basename $year.gz)"\t" gunzip - c $year \ awk '{ temp = substr($0, 88, 5) + 0; q = substr($0, 93, 1); %./max_temperature.sh if (temp!=9999 && q ~ /[01459]/ && temp > max) max = temp } 1901 317 END { print max }' 1902 244 done 1903 289 1904 256 1905 283... Temps de calcul pour les données de 1901 à 2000 : 42 minutes Source: Tom White, Hadoop: The Definitive Guide 17 Exemple : Traitement de données météorologiques Approche Le développeur écrit deux fonctions Le Mapper qui sera responsable d'extraire l'année et la température d'une ligne. Le Reducer qui sera responsable de calculer la température maximale. Hadoop se charge de Découper les fichiers d'entrée en morceaux, Instancier le Mapper sur chaque machine du cluster et d'exécuter les instances, Collecter les résultats des instances Mapper, Instancier le Reducer sur chaque machine du cluster et d'exécuter les instances en leur donnant les donnée produites par les instances Mapper, Stocker les résultats des instances Reducer. 106 0043011990999991950051512004...9999999N9+00221+99999999999... Mapper 1950 22 1950 0 22-11 Reducer 1950 22 18

0 0067011990999991950051507004...9999999N9+00001+99999999999... 106 0043011990999991950051512004...9999999N9+00221+99999999999... 212 0043011990999991950051518004...9999999N9-00111+99999999999... 318 0043012650999991949032412004...0500001N9+01111+99999999999... Les données météorologiques sont découpées en lignes. 424 0043012650999991949032418004...0500001N9+00781+99999999999... Mapper Mapper Mapper Mapper Mapper Le Mapper extrait l'année et la température et écrit une paire clévaleur (année, température) en sortie. 1950 0 1950 22 1950-11 1949 111 1949 78 Réorganisation et tri Les données intermédiaires sont regroupées par clé (l'année) et triées. 1949 111 78 1950 0 22-11 Reducer 1949 111 Reducer 1950 22 Le Reducer lit une année et toutes les températures de cette année. Il détermine le maximum et écrit une paire clé-valeur (année, température maximale) en sortie. Temps de calcul pour les données de 1901 à 2000 avec 10 machines : 6 minutes Exemple : Traitement de données météorologiques Le Mapper en Java import java.io.ioexception; import org.apache.hadoop.io.intwritable; import org.apache.hadoop.io.longwritable; import org.apache.hadoop.io.text; import org.apache.hadoop.mapreduce.mapper; public class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable> { 20 private static final int MISSING = 9999; @Override public void map(longwritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.tostring(); String year = line.substring(15, 19); int airtemperature; if (line.charat(87) == '+') { // parseint doesn't like leading plus signs airtemperature = Integer.parseInt(line.substring(88, 92)); } else { airtemperature = Integer.parseInt(line.substring(87, 92)); } String quality = line.substring(92, 93); if (airtemperature!= MISSING && quality.matches("[01459]")) { context.write(new Text(year), new IntWritable(airTemperature)); } } } Source: Tom White, Hadoop: The Definitive Guide entrée type clé entrée type valeur sortie type clé sortie type valeur entrée clé entrée valeur sortie écriture clé-valeur en sortie

Exemple : Traitement de données météorologiques Le Reducer en Java import java.io.ioexception; import org.apache.hadoop.io.intwritable; import org.apache.hadoop.io.text; import org.apache.hadoop.mapreduce.reducer; public class MaxTemperatureReducer extends Reducer<Text, IntWritable, Text, IntWritable> { @Override public void reduce(text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int maxvalue = Integer.MIN_VALUE; for (IntWritable value : values) { maxvalue = Math.max(maxValue, value.get()); } context.write(key, new IntWritable(maxValue)); } } entrée type clé entrée type valeur sortie type clé sortie type valeur entrée clé entrée valeurs sortie écriture clé-valeur en sortie Source: Tom White, Hadoop: The Definitive Guide 21 Exemple : Traitement de données météorologiques Le programme en Java import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwritable; import org.apache.hadoop.io.text; import org.apache.hadoop.mapreduce.job; import org.apache.hadoop.mapreduce.lib.input.fileinputformat; import org.apache.hadoop.mapreduce.lib.output.fileoutputformat; public class MaxTemperature { public static void main(string[] args) throws Exception { if (args.length!= 2) { System.err.println("Usage: MaxTemperature <input path> <output path>"); System.exit(- 1); } Job job = new Job(); job.setjarbyclass(maxtemperature.class); job.setjobname("max temperature"); répertoire des fichiers d'entrée répertoire des fichiers de sortie 22 FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setmapperclass(maxtemperaturemapper.class); job.setreducerclass(maxtemperaturereducer.class); job.setoutputkeyclass(text.class); job.setoutputvalueclass(intwritable.class); System.exit(job.waitForCompletion(true)? 0 : 1); } } Source: Tom White, Hadoop: The Definitive Guide

Exemple : Comptage de mots William Shakespeare a écrit 38 pièces de théâtre, 154 sonnets, deux poèmes narratifs et autres vers. Chaque oeuvre est disponible comme fichier texte. Problème posé : compter la fréquence des mots de l'oeuvre shakespearienne. Approche Le développeur écrit deux fonctions Le Mapper qui sera responsable d'isoler les mots. Le Reducer qui sera responsable de compter les mots. 23 Exemple : Comptage de mots 32403 To be or not to be 56495 the last, not least Mapper Mapper to 1 be 1 or 1 the 1 last 1 Les documents d'entrée sont découpés en lignes. Le Mapper identifie les mots dans une ligne et pour chaque mot écrit en sortie une paire clé-valeur avec le mot comme clé et la valeur 1. not 1 to 1 be 1 not 1 least 1 Réorganisation et tri Les données intermédiaires sont regroupées par clé (le mot) et triées. be 1 1 last 1 least 1 not 1 1 or 1 the 1 to 1 1 Reducer Reducer Reducer Reducer Reducer Reducer Reducer be 2 last 1 least 1 not 2 or 1 the 1 to 2 Le Reducer lit un mot et toutes les occurrences du mot. Il additionne les occurrences et écrit en sortie une paire clévaleur avec le mot et ses occurrences. 24

Exercice 1 : Estimation de Pi Problème Utilisant la simulation Monte Carlo, déterminer la valeur de Pi Lancer des fléchettes 1 Calculer le rapport entre le nombre de fléchettes dans le cercle et le nombre de fléchettes dans le carré Déterminer si une fléchette se trouve à l'intérieur du cercle est facile -1 0 1-1 surface cercle = π surface carré = 4 π = 4 x surface cercle / surface carré 25 Exercice 1 : Estimation de Pi Solution 26

Exercice 2 : Lissage d'image Pour lisser une image utiliser un cache coulissant remplacer un pixel par la moyenne des 9 pixels dans le cache 27 Exercice 2 : Lissage d'image Solution 28

Flux de données détaillé 29 Source: Yahoo! Hadoop Tutorial Détails Fichiers d'entrée Les fichiers d'entrée contiennent les données pour un programme. Ils se trouvent généralement dans un système de fichiers distribué (HDFS, Amazon S3,...) Le format des fichiers d'entrée peut être arbitraire Fichiers logs en format texte Fichiers binaires Enregistrements sur plusieurs lignes... Ils peuvent être très larges, plusieurs dizaines de Go ou plus. 30

Détails InputFormat La manière dont les fichiers sont divisés en morceaux et lus sont définis par le InputFormat. InputFormat est une classe qui sélectionne les fichiers qui seront utilisés en entrée définit les InputSplits qui divisent un fichier fournit une factory pour des objets RecordReader qui vont lire le fichier. Hadoop vient avec un nombre de InputFormats prédéfinis InputFormat Description Clé Valeur TextInputFormat Format par défaut. Lit les lignes d'un fichier texte. L'offset en octets de la ligne dans le fichier. La ligne KeyValueInputFormat SequenceFileInputFormat 31 Analyse les lignes d'un fichier texte en paires clévaleur. Un format binaire à haute performance spécifique à Hadoop. Tout ce qui précède le premier caractère tab. Défini par l'utilisateur Le reste de la ligne Défini par l'utilisateur Détails InputSplit La classe InputSplit décrit une unité de travail qui correspond à une tâche Map dans un programme. Par défaut le InputFormat divise un fichier en splits de 64 Mo (ce qui correspond à la taille d'un chunk en HDFS). En divisant le fichier en splits, plusieurs tâches Map peuvent travailler en parallèle sur le même fichier. Si le fichier est très large, cela améliore la performance considérablement. Chaque tâche Map correspond à un seul split. 32

Détails RecordReader Le InputSplit définit un morceau de données à traiter mais ne spécifie pas comment y accéder. La classe RecordReader lit les données depuis leur source et les convertit en paires clé-valeur qui sont prêtes à être consommées par un Mapper. Le RecordReader est appelé à plusieurs reprises jusqu'à ce que le split entier soit consommé. Chaque invocation du RecordReader conduit à un autre appel de la fonction Map définie par le développeur. 33 Détails Mapper et Reducer Le Mapper exécute le traitement défini par l'utilisateur dans la première phase du programme. Une nouvelle instance du Mapper est créée pour chaque split. Le Reducer exécute le traitement défini par l'utilisateur dans la seconde phase du programme. Une nouvelle instance du Reducer est créée pour chaque partition. Pour chaque clé dans la partition, le Reducer est appelé une fois. 34

Détails Partitioner Après l'exécution des Mapper on a des résultats intermédiaires stockés sur chaque noeud du cluster, en format clé-valeur. Le framework doit maintenant préparer la prochaine phase de traitement par les Reducers. Les données doivent être transportées entre les noeuds, car les valeurs avec la même clé sont garanties d'être traitées par le même Reducer. Potentiellement on a un grand nombre de clés dans les données. On veut exécuter plusieurs Reducers en parallèle sur le cluster. Le développeur configure en avance le nombre d'instances de Reducers disponibles sur le cluster. Le framework divise l'espace des clés en partitions et attribue à chaque partition une instance Reducer. Chaque Mapper peut émettre des paires clé-valeur à n'importe quelle partition. Donc les noeuds doivent se mettre d'accord vers où envoyer les différentes pièces des données intermédiaires. La classe Partitioner détermine vers quelle partition une paire clé-valeur ira. Le Partitioner par défaut calcule une valeur de hash de la clé pour déterminer la partition. 35 Détails Tri Chaque Reducer est responsable de réduire un ensemble de paires clé-valeurs L'ensemble de paires clé-valeurs sur un noeud est automatiquement trié avant qu'il soit présenté au Reducer. Les valeurs par contre ne sont pas triées. 36

Détails OutputFormat La classe OutputFormat définit comment les paires clé-valeur produites par les Reducers sont écrites sur les fichiers de sortie. Il y a des OutputFormat fournis avec Hadoop qui écrivent des fichiers dans HDFS ou sur le disque local. Chaque Reducer écrit dans son propre fichier, mais dans un répertoire commun. Les OutputFormats prédéfinis fournis avec Hadoop : OutputFormat Description TextOutputFormat SequenceFileOutputFormat Format par défaut. Écrit une paire clé-valeur par ligne, les deux parties séparées par un caractère tab. Écrit des fichiers binaires qui peuvent être lus par des programmes subséquents. NullOutputFormat Ne produit pas de fichier de sortie. 37 Détails Optimisation de la phase Reduce avec le Combiner Pour certains traitements le développeur peut optimiser la phase Reduce avec le Combiner. Le Combiner est une sorte de Reducer supplémentaire écrit par le développeur. 38 Source: Yahoo! Hadoop Tutorial

Détails Optimisation de la phase Reduce avec le Combiner S'il est présent, le framework insère le Combiner dans la pipeline de traitement sur les noeuds qui viennent de terminer la phase Map. Le Combiner est exécuté après la phase Map, mais avant que les données intermédiaires sont envoyées vers d'autres noeuds. Le Combiner reçoit les données produites par la phase Map sur un noeud. Il reçoit seulement les données locales, pas celles des autres noeuds. Il produit des paires clé-valeur qui seront envoyées vers les Reducers. Le Combiner peut être utilisé dans les cas où on peut déjà commencer le Reduce sans avoir toutes les données. P. ex. le calcul de température maximale s'y prête très bien. Le Combiner calcule la température maximale pour les données disponibles sur le noeud local. Au lieu d'envoyer les paires (1949, 111) et (1949, 78) vers les Reducers on envoie seulement la paire (1949, 111). 39