Hadoop et MapReduce
W
Introduction au traitement de gros volumes de données
Olivier Grisel AFPy OSDC FR – Nuxeo
http://twitter.com/ogrisel
OSDC FR 2009 – Paris Cité des Sciences
Quelques ordres de grandeur
• % ls sh enwiki20090902pagesarticles.xml– 23G enwiki20090902pagesarticles.xml
• % time cat enwiki20090902pagesarticles.xml > /dev/null
– 2.53s user 41.39s system 23% cpu 3:03.92 total– 128MB/s (sur un disque SSD)
• 100 GB => ~ 10 minutes• 1 TB => ~ 2 heures• 1 PB => ~ 3 mois
MapReduce
• Architecture mise au point par Google• But: faire des traitements (indexation,
aggrégation, datamining, ...)• Webscale (100 GB+, TB, PB, …)• Déplacer les traitements sur l'infra de stockage• Exploitation de l'information localisation des
données• Tolérance aux erreurs disque / hardware
Un exemple: Indexer en MapReduce
• map(pageName, pageText):– foreach word in pageText:– emitIntermediate(word, pageName);
[copie et trie par clefs entre les noeuds]• reduce(word, pageNames):
– bucket = createBucketFor(word)– foreach pageName in pageNames:
● bucket.add(pageName)
– bucket.finalize()
Le projet Hadoop
• Open Source / Apache Software Foundation • Yahoo / Facebook / Cloudera• Java• Sous projets :
– Hadoop MapReduce– Hadoop DFS & Hbase– Pig & Hive– Mahout
Architecture générale
NameNode
JobTracker
Client
TaskTracker
DataNode
TaskTracker
DataNode
TaskTracker
DataNode
TaskTracker
DataNode
Demo
• Construire un jeu de données basé sur un dump XML de wikipedia
• Entrainer un “classifieur” bayesien de documents
• Pour chaque pays, rassembler dans un fichier la liste des texte brut des articles de cette catégorie
• Un article par ligne dans, 1 fichier par pays
Chargement des données dans HDFS
java jar org.apache.mahout.classifier.\bayes.WikipediaXmlSplitter \ d /path/to/enwikilatestpagesarticles.xml o wikipediachunks/ c 64
hadoop dfs put wikipediachunks/ wikipediadump
Lancement du Job
hadoop jar /path/to/mahoutexamples*.job \ org.apache.mahout.classifier.bayes\.WikipediaDatasetCreatorDriver \ i wikipediadump o wikipediadataset c src/test/resources/country.txt
HadoopViz
Les résultats
C'est bien tout ça mais j'aime pas le Java ...
●… et bien fais le en Scala !
Hadoop Streaming
• Utiliser des programmes hors JVM:– Lire sur stdin
– Ecrire sur stdout
– Respecter la forme “<key>\t<value>\n”
– Emettre un heartbeat sur stderr
• C, Perl, Python, Ruby, bash, sed, awk, ...
Running Streaming Jobs
hadoop jar /path/to/hadoop0.20.1streaming.jar \ mapper /home/hadoop/mapper.py \ reducer /home/hadoop/reducer.py \ input gutenberg/* output gutenbergoutput
Je suis DBA et je ne programme pas
• Hive : SQLlike pour faire du Datawarehousing avec Hadoop
• Pig Latin : scripting haut niveau pour faire des transformations sur des logs, dump de DB, ...
Comment installer Hadoop
• Ajouter le repo Cloudera Distribution for Hadoop 2 (CDH2) dans /etc/apt/sources.list
• sudo aptget install hadoop hadoopconfpseudo• for service in /etc/init.d/hadoop* ;
do sudo $service start;done
Comment ne pas installer Hadoop
• Image Amazon EC2 AMI par cloudera avec CDH2
– scripts de lancement et de monitoring– Pig, Hive, ...– Possibilité d'installer des packages en plus
• Service Amazon Elastic MapReduce– Lance un cluster AWS EC2 avec Hadoop
préinstallé– 1$ / h / node (octocore avec 1TB de disque)
Apprendre a Programmer en MapReduce
• Tutoriel officiel : http://hadoop.apache.org• Autres tutos : http://www.michaelnoll.com• Blog avec exemples d'applications :
http://www.datawrangling.com/• Support de formation Cloudera
– Videos– Slides + fichiers exercices– Images de machine virtuelle
Merci pour votre attention !
Des questions ?
http://twitter.com/ogrisel
Top Related