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 enwiki­20090902­pages­articles.xml
           –   23G enwiki­20090902­pages­articles.xml
    •
        % time cat enwiki­20090902­pages­articles.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/enwiki­latest­pages­articles.xml
  ­o wikipedia­chunks/ ­c 64

hadoop dfs ­put wikipedia­chunks/ wikipediadump



                           
     
     
     
Lancement du Job


hadoop jar /path/to/mahout­examples­*.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/hadoop­0.20.1­streaming.jar 
   ­mapper /home/hadoop/mapper.py 
   ­reducer /home/hadoop/reducer.py  
   ­input gutenberg/*
   ­output gutenberg­output



                          
Je suis DBA et je ne programme pas
    •
        Hive : SQL­like 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 apt­get install hadoop hadoop­conf­pseudo
    •
        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  (octo­core avec 1TB de disque)
                                    
     
Apprendre a Programmer en 
                 MapReduce
    •
        Tutoriel officiel : http://hadoop.apache.org
    •
        Autres tutos : http://www.michael­noll.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
                  

Hadoop MapReduce - OSDC FR 2009