Exposés logiciels, systèmes et réseaux Apache Hadoop Exposés logiciels, systèmes et réseaux Camille DARCY 8 Janvier 2013
Plan Un peu d’histoire... Le framework et ses objectifs Les grands concepts le système de fichiers HDFS MapReduce Exemples d’utilisation Quelques implémentations et outils Conclusion
Un peu d’histoire... Initié par Doug Cutting Pré-histoire : le projet Nutch (2002- 2004) Développement influencé par les publications sur GFS et MapReduce En 2009, intégré à la fondation Apache Sortie de la v1.0.0 Open-Source en 2011
Le framework Java Bibliothèque logicielle Java Facilite le développement de systèmes d’analyse et de stockage de Big Data Fournit un ensemble d’outils (executables, démons...) Exécution de calculs sur une à plusieurs milliers de machines (clusters) Deux concepts majeurs : HDFS et MapReduce
Objectifs Haute disponibilité / Robustesse Rapidité Abstraction Mise à l’échelle
HDFS Stockage de données distribué Inspiré par le Google FileSystem (GFS) Haute disponibilité / réplication des données Blocs de 64Mo (chunks) Utilise TCP/IP et RPC
Hôtes HDFS Architecture Maître / Esclave NameNode : Gère l’espace de noms du système de fichiers (serveurs esclaves) et l’accès aux fichiers par les clients DataNode : Gère le stockage des fichiers sur un noeud (création / suppression de blocs de données, réplication) Réplication configurable
Problématiques traitées par HDFS Robustesse « Battements de coeur » Auto-balancing Sommes de contrôle Organisation des données Découpage des fichiers en blocs Mise en cache des fichiers avant insertion Replication entre DataNodes
MapReduce Qu’est-ce que MapReduce ? Un modèle de programmation pour faire du calcul distribué Un framework Implémentation Open-Source dans Hadoop
Fonctionnement de MapReduce Traitement distribué de données en deux fonctions Map : fonction de traitement par décomposition en sous-problèmes Etape intermédiaire : Combine Reduce : fonction d’aggrégation des résultats pour composer une unique solution
MapReduce dans Hadoop Utilise HDFS en mode distribué JobTracker : Noeud maître responsable de l’exécution de tâches sur un cluster TaskTracker : Noeud esclave exécutant une tâche (map) sur une partie des données
Architecture globale Configuration de l’architecture matérielle dans des fichiers XML ou via outils de supervision NameNodes et DataNodes : noeuds gérant la répartition des données et leur stockage (HDFS) JobTrackers et TaskTrackers : noeuds gérant la planification et l’exécution des calculs (MapReduce) Transparence au niveau du framework pour l’exécution de tâches
Executable Hadoop bin/hadoop fs [command_options] Manipulation du système de fichiers distribué (HDFS) bin/hadoop jar <jar> mainClass [args] Lancement d’une application Hadoop bin/hadoop job [-submit, -status, -kill...] Programmer / gérer des tâches
Modes d’execution Standalone mode Pseudo-distributed mode Fully-distributed mode
Execution Standalone Objectif : Tester un programme simple ou MapReduce L’exemple du Sudoku
Exemple de Job MapReduce Job MapReduce = Programme Java Execution de la commande Grep En entrée : fichiers de configuration Hadoop En sortie : mots correspondant à une regex et son nombre d’occurences Configuration de l’architecture matérielle dans des fichiers XML ou via outils de supervision NameNodes et DataNodes : noeuds gérant la répartition des données et leur stockage (HDFS) JobTrackers et TaskTrackers : noeuds gérant la planification et l’exécution des calculs (MapReduce) Transparence au niveau du framework pour l’exécution de tâches
Pseudo-distributed Configuration du NameNode et du JobTracker (master) conf/core-site.xml: <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration> conf/masters: localhost conf/mapred-site.xml: <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
Pseudo-distributed Configuration du/des DataNode(s) / TaskTracker(s) (slaves) conf/slaves: localhost Configuration de la réplication conf/hdfs-site.xml: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
Démonstration en mode pseudo-distributed
Exemple de Job MapReduce Compter les mots dans un ensemble de fichiers En entrée : oeuvres de Victor Hugo En sortie : chaque mot et son nombre d’occurences Exécution en mode distribué (machine + VM) Configuration de l’architecture matérielle dans des fichiers XML ou via outils de supervision NameNodes et DataNodes : noeuds gérant la répartition des données et leur stockage (HDFS) JobTrackers et TaskTrackers : noeuds gérant la planification et l’exécution des calculs (MapReduce) Transparence au niveau du framework pour l’exécution de tâches
Fully-distributed Configuration du NameNode et du JobTracker (master) conf/core-site.xml: <configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> </configuration> conf/masters: master conf/mapred-site.xml: <configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>
Fully-distributed Configuration du/des DataNode(s) / TaskTracker(s) (slaves) conf/slaves: slave Configuration de la réplication conf/hdfs-site.xml: ... <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
Démonstration en mode distributed
Implémentations et outils Stockage de données : HBase (Apache) Analyse de données : Pig (Yahoo!), Hive (Facebook), Mahout, Hama Configuration de clusters : ZooKeeper, Chukwa Une distribution Hadoop : Cloudera
Utilisateurs Yahoo! Facebook Utilisait un cluster de 10000 machines sous Linux en 2008 rien que pour son moteur de recherche Facebook Détient le plus grand cluster de machines avec plus de 100 Pétaoctets de stockage en 2012 Et beaucoup d’autres : Twitter, LinkedIn, IBM, HP, Microsoft, Apple, Amazon, eBay...
Conclusion Base intéressante pour pouvoir gérer de gros volumes de données Combinaison de HDFS et de MapReduce Implémenté dans de nombreux outils Puissant mais difficile à implémenter
Webographie Wikipedia Apache Hadoop Cloudera Yahoo! Hadoop http://en.wikipedia.org/wiki/Apache_Hadoop Apache Hadoop http://hadoop.apache.org et http://wiki.apache.org/hadoop/ Cloudera http://www.cloudera.com/hadoop/ Yahoo! Hadoop http://developer.yahoo.com/blogs/hadoop/ Blog de Brad Hedlund http://bradhedlund.com/2011/09/10/understanding-hadoop-clusters-and-the- network/