2. - 2 -
Hadoop: Introduction
• Hadoop, un projet open source
• Hadoop et Yahoo!
• Hadoop Core
• HDFS
• MapReduce: Principes de base et implémentation
Hadoop
• Hadoop et Java
• Hadoop à Yahoo!
3. - 3 -
Hadoop: Projet open source
• Hadoop: composante de Nutch, partie recherche internet du
projet Lucene.
• Lucene http://lucene.apache.org/
– Open source search software development
– Lucene Java
– Nutch basé sur Lucene Java, créé en 2003
– Adoption de Lucene assez étendue, notamment par wikipedia.
• Hadoop a été créé par Doug Cutting, actuellement employé
à Yahoo!
– Yahoo! (d’abord Overture) soutien le développement de Nutch
– Développement du NDFS: Nutch Distributed File System, basé
sur MapReduce de Google. Naissance de Hadoop.
4. - 4 -
Hadoop: Projet open source
http://hadoop.apache.org/
• 23 Janvier 2008 - Hadoop devient un des projets de premier
plan de la fondation apache
• Plusieurs sous projets lui sont rattachés:
– Hadoop Core: HDFS + Support pour MapReduce Filesystems
– Hbase: Base de données distribuée
– Pig: langage et framework dediés aux applications distribuées
– ZooKeeper: coordination haute disponibilité et fiable
• Plusieurs partenaires importants: Yahoo!, Facebook, IBM,
Quantcast, …
5. - 5 -
Hadoop et Yahoo!
• Plusieurs groupes implémentaient déjà une solution de grid
computing (open source ou non)
• Formation du Yahoo! Grid Computing
• Investissement important dans Hadoop
• Pourquoi l’open source ?
– La plupart des composants logiciels utilisés par Yahoo! Sont
déjà open source (Apache, Mysql, …)
– Ces solutions étaient potentiellement plus avancées que nos
propres solutions
– Investissement existant de grands noms de l’industrie et
partenaires ( Ebay, quantcast, internet archive …)
– Moyen d’entrer dans le domaine avec un investissement
minimum
7. - 7 -
HDFS: Hadoop Distributed File System
Système de fichiers distribué, les fichiers sont divisés en blocs puis
répartis sur un cluster
• Prérequis:
– Tolérance aux pannes
• Cluster de grande taille, machines de base => probabilité de panne assez
haute. La tolérance est donc essentielle dès le design.
– Lecture d’un fichier en continu (streaming)
• Optimisation pour les gros fichiers et les applications les traitant d’un bout
à l’autre (tous les cas pratiques).
– Taille moyenne des fichiers en GB ou TB
– Toute écriture de fichier est unique, lectures multiples
– “Moving Computation is Cheaper than Moving Data”
• Traiter les données où elles se trouvent
• Lorsque les données d’un programmes sont de taille importante, le point
bloquant est le débit en lecture, il convient de ne pas l’aggraver.
– Portable: supporte un parc hétérogène de machines
9. - 9 -
HDFS: Architecture maître esclave
• NameNode (Maître)
– Unique, un NameNode par cluster
– Gère les noms de fichiers
• { nom de fichier classique, nombre de copies, blocks }
Ex: {/home/logs/20081112-1, 3, {1, 7, 5} }
– Gère toutes les opérations classiques: open/close/rename, répertoires
et le nombre de copies (replication factor)
– Reçoit un message régulier des DataNode et maintient une table
précise de leur état
– Gère la réplication des blocs
– Persistance des données
• DataNode (Esclave)
– Exécute les lectures/écritures des blocs par les clients
– Crée/efface/réplique les blocs. N’ont à gérer que des blocs.
10. - 10 -
HDFS: Architecture
• Lors de l’écriture d’un fichier, celui-ci est d’abord écrit dans un fichier
temporaire au sein du client lui-même. Lorsque sa taille atteint celle d’un
bloc, le NameNode est contacté, il crée le fichier dans HDFS et retourne
un DataNode ID où transférer le bloc. Un tel buffering évite les
congestions trop rapides.
• Le NameNode essaie de placer les blocs selon leurs position dans les
racks (si 3: 2 +1). Eviter de tout avoir dans le même rack, éviter 3 racks
différents pour la tolérance aux pannes, et pour éviter un traffic entre les
racks trop important.
11. - 11 -
MapReduce [8] : Principes
• Modèle de programmation pour
traiter et générer beaucoup de
données
• L’utilisateur fournit:
– les données,
– une fonction Map qui permet
de générer un ensemble clé/
valeur
– une fonction Reduce qui
permet de réduire plusieurs
ensembles générés par Map
en un seul
• Le framework découpe les
données, parallélise les tâches et
génère un résultat
• Ex: si k1: nom du fichier et v1 son
contenu
Map(string k1, string v1) {
for each word w in v1:
EmitIntermediate(w, « 1 »)
}
Reduce(k2, Iterator v2) {
int result = 0;
for each v in v2:
result += 1;
Emit(AsString(result));
}
=> Nombre d’occurrences de chaque
mot
13. - 13 -
Hadoop Map-Reduce
• Le développeur fournit:
– Les fonctions Map et Reduce et un
ensemble de données en entrée
• Workflow
– 1ere étape: lecture des données
{ [clé1, valeur1], … }
– Etape de Mapping: exécution de la
fonction Map => nouvel ensemble
de { [clé1, valeur1], … }
– Distribution des [clé,valeurs] vers les
noeuds de traitement
– Etape Reduce combines toutes les
paires à clé identique vers une
nouvelle liste clé/valeur réduite.
– Etape d’écriture des clés/valeurs
dans des fichiers.
• Toutes les étapes sont distribuées
sur plusieurs tâches
– Le Framework assure le scheduling
des tâches dans le cluster
– Le Framework assure la tolérance
aux pannes.
Input 0
Map 0
Input 1
Map 1
Input 2
Map 2
Reduce 0 Reduce 1
Out 0 Out 1
Shuffle
14. - 14 -
Map-Reduce features
• Division des tâches en Map/Reduce
– Meilleure répartition de charge
– Récupération des erreurs plus rapide
• Traiter les données là où elles se trouvent
– Le point bloquant est le débit de lecture/écriture.
– Map-Reduce + DFS y est très efficace:
• Map-Reduce sait où se trouvent les données
• Les tâches sont plannifiées aussi proche des données que
possible
• Ré-exécution et exécution spéculative
– Les noeuds moins performant d’un cluster ont tendance à
ralentir toute l’exécution où à amener des erreurs
– Hadoop re-exécute les tâches au besoin
– Hadoop exécute plusieurs instances des dernières tâches et
prend les résultats de la plus rapide
15. - 15 -
Hadoop Map-Reduce: Architecture
• Architecture Maître/Esclaves
• Map-Reduce “Jobtracker”: Maître
– Collecte les tâches Map/Reduce
– Les assigne aux TaskTrackers
– Supervise les tâches ainsi que l’état des tasktracker, re-
exécute celles qui ont échouées
– Il est unique
• Map-Reduce “Tasktrackers”: Esclaves
– Exécute les tâches Map ou Reduce à la demande du
JobTracker
– Supervise le stockage et la transmission des données de
résultats intermédiaires
16. - 16 -
Hadoop HDFS + MR cluster
D D D DTT
JobTracker
Namenode
Machines with Datanodes and Tasktrackers
T T TD
Client
Job Submission
HTTP Monitoring UI
17. - 17 -
Exemple: Wordcount
// Map
public static class Map 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 tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
output.collect(word, one); // output object collects data
}
}
}
18. - 18 -
Wordcount: Reduce
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));
}
}
19. - 19 -
Wordcount: Exécution
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(WordCount.class);
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class); // local aggregation after
Map (decrease size of the data)
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class); // Input format: Text
conf.setOutputFormat(TextOutputFormat.class); // Output: Text
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
20. - 20 -
Hadoop est développé en Java
• Hadoop est écrit en java
– Tourne sur Linux, Window, BSD, MacOS…
– Support Java pour FreeBSD6
• Mais il supporte plusieurs autres langages:
– C++ via SWIG
– Streaming: commandes Unix (42% des utilisations à Yahoo!)
– PIG (28%, à égalité avec Java)
• Java est un avantage:
– Les projets open source les plus récents sont écrits en java
– La rapidité d’exécution n’est pas le point bloquant: limités par le réseau et
la vitesse d’écriture sur le disque.
– Supporte d’autres langages.
21. - 21 -
Hadoop à Yahoo!
• Jan 2006 Doug Cutting devient employé de Yahoo!
• Près d’un membre du PMC sur deux est un Yahoo!
• Un blog dédié:
http://developer.yahoo.net/blogs/hadoop/
• Utilisation pour:
– La recherche internet
– L’analyse des logs
– Ads matching
– Plateforme ouverte disponible à tous les équipes produit
Yahoo!
22. - 22 -
Hadoop à Yahoo!
• 17k+ machines
• + grand cluster: 2000 nœuds.
4000 nœuds en phase de
test.
• Plusieurs PetaOctets de
données (compressées,
déduppliquées)
• Centaines de milliers de
tâches Hadoop tous les mois.
23. - 23 -
Webmap utilise Hadoop
• Webmap est le graphe regroupant toutes les adresses
connues par le moteur de recherche Yahoo!
• Il est mis à jour tous les jours grâce à une centaine de
tâches Map/Reduce
• Hadoop est extensible:
– 1 trilliard de nœuds dans le graphe.
– Taille du fichier résultat: 300 TB compressé
– 10000 cores
– Utilise 5 PB d’espace disque
• Développé en C++ / Hadoop
27. - 27 -
Hadoop: Projet Open Source Apache
• Apache gère des projets pour la communauté:
– Les utilisateurs
– Les contributeurs (soumettent des patches)
– Les committeurs (peuvent les committer)
– Le Project Management Committee: ses membres sont des
committeurs et peuvent en élire de nouveaux, ils décident
aussi des releases.
• Devenez membres! … Au mérite, accessible à tous.
• Intérêt croissant de la communauté. Contribuez!
• http://hadoop.apache.org/
• http://developer.yahoo.net/blogs/hadoop/
28. - 28 -
Sources [1]
1. http://en.wikipedia.org/wiki/Doug_Cutting
2. http://blog.lucene.com/ Le Blog de Doug Cutting
3. http://lucene.apache.org/ Lucene
4. http://en.wikipedia.org/wiki/Lucene Wikipedia Lucene
5. http://lucene.apache.org/nutch/ Nutch
6. http://en.wikipedia.org/wiki/Nutch Wikipedia Nutch
7. http://labs.google.com/papers/gfs.html Google File System
8. http://labs.google.com/papers/mapreduce.html MapReduce
9. http://en.wikipedia.org/wiki/Hadoop Wikipedia Hadoop
10. http://radar.oreilly.com/archives/2007/08/yahoos-bet-on-h.html
11. http://wiki.apache.org/hadoop/HadoopPresentations
29. - 29 -
Sources [2]
• http://wiki.apache.org/hadoop-data/attachments/HadoopPresentations/
attachments/HadoopEBIG-Oct2008.pdf Introduction à Hadoop à l’East
Bay Innovation Group par Owen O’Malley