Hadoop Introduction in Paris

29
Oktay Istanbullu – Hugues Le Bars Yahoo! Technicals Hadoop: Introduction

description

This was an introduction to Hadoop by Oktay Istanbullu and Hugues LeBars of Yahoo! at the SkillsMatter event in Paris, November 2008

Transcript of Hadoop Introduction in Paris

Page 1: Hadoop Introduction in Paris

Oktay Istanbullu – Hugues Le Bars Yahoo! Technicals

Hadoop: Introduction

Page 2: Hadoop Introduction in Paris

- 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!

Page 3: Hadoop Introduction in Paris

- 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.

Page 4: Hadoop Introduction in Paris

- 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, …

Page 5: Hadoop Introduction in Paris

- 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

Page 6: Hadoop Introduction in Paris

- 6 -

Hadoop Core

•  Hadoop Core = HDFS + Map Reduce

Page 7: Hadoop Introduction in Paris

- 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

Page 8: Hadoop Introduction in Paris

- 8 -

HDFS: Architecture

Page 9: Hadoop Introduction in Paris

- 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.

Page 10: Hadoop Introduction in Paris

- 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.

Page 11: Hadoop Introduction in Paris

- 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

Page 12: Hadoop Introduction in Paris

- 12 -

Hadoop Map-Reduce

Page 13: Hadoop Introduction in Paris

- 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

Page 14: Hadoop Introduction in Paris

- 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

Page 15: Hadoop Introduction in Paris

- 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

Page 16: Hadoop Introduction in Paris

- 16 -

Hadoop HDFS + MR cluster

D D D D T T

JobTracker

Namenode

Machines with Datanodes and Tasktrackers

T T T D

Client

Job Submission

HTTP Monitoring UI

Page 17: Hadoop Introduction in Paris

- 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

}

}

}

Page 18: Hadoop Introduction in Paris

- 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));

}

}

Page 19: Hadoop Introduction in Paris

- 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);

}

Page 20: Hadoop Introduction in Paris

- 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.

Page 21: Hadoop Introduction in Paris

- 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!

Page 22: Hadoop Introduction in Paris

- 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.

Page 23: Hadoop Introduction in Paris

- 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

Page 24: Hadoop Introduction in Paris

- 24 -

Intérêt de la communauté croissant

Page 25: Hadoop Introduction in Paris

- 25 -

Et Contributions croissantes

Page 26: Hadoop Introduction in Paris

- 26 -

Hadoop: dernières avancées

4000 nœuds! HDFS Cluster Statistics Capacity : 14.25 PB DFS Remaining : 10.61 PB DFS Used : 233.44 TB DFS Used% : 1.6 % Live Nodes : 4049 Dead Nodes : 226

Map-Reduce Cluster Statistics Nodes: 3561 Map Slots: 4 slots per node Reduce Slots: 4 slots per node

Améliorations continues

Page 27: Hadoop Introduction in Paris

- 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/

Page 28: Hadoop Introduction in Paris

- 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

Page 29: Hadoop Introduction in Paris

- 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