Hadoop et MapReduce
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
Name
Node
Data Data Data
Node Node Node
Client
Task Task Task
Tracker Tracker Tracker
Job
Tracker
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
0 comments
Post a comment