hadoop and friends : introduction
TRANSCRIPT
Introduction à l'écosystème hadoop
● Introduction● Composants de base du système● HDFS● MapReduce● Warnings ● L'écosystème● Usecases Ekino● Perspectives et liens
Introduction
Le contexte
● Croissance des volumes de données produits par les systèmes informatiques
● Réseaux sociaux, données scientifiques, capteurs
● Formes variées : texte structuré / non structuré, images
Les usecases typiques
● Analyse de logs
● Business Intelligence
● Transformation de données, ETL-style
● Machine learning : moteurs de recommandations, détection de patterns
Les limites techniques
● Les disques durs stockent de plus en plus de données, mais la vitesse d'accès reste la même
● La RAM disponible sur un serveur augmente, mais pas autant que la taille des datasets
● Si les données sont sur plusieurs serveurs, on augmente les capacités du système...
● Mais aussi les risques de panne hardware
L'approche Hadoop
● Les données doivent être répliquées sur plusieurs disques, afin de pallier aux crashs hardware
● Les données doivent être réparties de façon à minimiser les accès réseaux
● Si on pousse le code vers les données , et pas l'inverse, on évite des transferts massifs de données
Les origines d'Hadoop
● Au commencement, deux publications Google : ● The Google File System (GFS) : a scalable
distributed file system for large distributed data-intensive applications
● MapReduce: Simplified Data Processing on Large Clusters
● Ces systèmes décrivent la nouvelle infrastructure Google, et restent propriétaires.
Les origines d'Hadoop
● Pendant ce temps là, Doug Cutting, créateur de Lucene et Nutch, cherche un framework pour distribuer les calculs de graphes Nutch
● Il implémente les principes de GFS et MapReduce dans
Nutch
● Il est embauché par Yahoo! pour poursuivre ces développements
● Yahoo donne Hadoop à la fondation Apache
Composants de base du système
Les composants Hadoop
● Hadoop se compose de deux systèmes : HDFS et MapReduce
● Cinq types de process vont gouverner ces systèmes
Les composants : Namenode
● Le Namenode est le process qui pilote HDFS : il sait où sont stockées quelles données
● C'est lui qui orchestre les DataNodes
● Ce process est d'autant plus crucial que c'est aussi le SPOF du système
● Nécessite beaucoup de RAM
Les composants : SecondaryNamenode
● Le SecondaryNamenode prends des snapshots des logs du Namenode à intervalles réguliers
● Ce n'est pas un backup du NameNode : il peut aider à récupérer des données et relancer un cluster, mais ça n'a rien d'automatique
Les composants : Datanode
● Les Datanodes sont les noeuds sur lesquels résident les données
● Ce sont eux qui traduisent les blocks HDFS en
fichiers sur disque
● En communication constante avec le Namenode
Les composants : JobTracker
● Le JobTracker pilote l'exécution des jobs sur le cluster
● C'est lui qui assigne les tâches aux TaskTrackers, et gèrent leur cycle de vie
● Il est également responsable de la gestion des erreurs, et de la relance des jobs
Les composants : TaskTracker
● Les TaskTrackers exécute les jobs (Map et Reduce)
● Ils communiquent au JobTracker l'état des jobs
Schéma généralSchéma général
Hadoop in Action, Manning
Les fichiers de configuration
● Trois fichiers thématiques pour configurer son cluster : core-site.xml, hdfs-site.xml, mapred-site.xml
● Tous sont au même format : un ensemble de paires clés / valeurs
● Des centaines de propriétés sont configurables, une dizaine est vraiment importante
Les fichiers de configuration
Trois modes d'exécution
● Mode local : un seul process, utile pour debugger, mais très limité
● Mode pseudo-distribué : 5 JVM distinctes, une par process, sur une seule machine. Utile pour valider des développements dans des conditions de prod.
● Mode distribué : le « vrai » mode, pour la production.
● On passe de l'un à l'autre en switchant des properties
Démarrer un cluster
● Le fichier slaves permet de définir les hosts sur lesquels tournent les datanodes / tasktrackers.
● Des scripts permettent de lancer HDFS et MapReduce simultanément ou séparément.
HDFS
Principes de HDFS
● L'unité de stockage de base est le Block (64Mb par défaut)
● Chaque block est répliqué sur plusieurs noeuds
● HDFS est fault-tolerant : si un noeud tombe, les
autres noeuds peuvent continuer à servir les fichiers
● RAID < JBOD (Just a Bunch Of Disks)
Limites de HDFS
● HDFS est orienté batchs : pas adapté aux traitements online
● HDFS est orienté « write once, read many times » : pas de modifications arbitraires au milieu d'un fichier
● HDFS n'est pas fait pour stocker beaucoup de petits fichiers : trop de metadata à maintenir
Features
● Supporte différents types de compressions : GZIP, BZ, LZO
● Filesystem manipulable via Java, C, Thrift
● Hadoop supporte également d'autres types de
filesystems : local, FTP, S3
● Le système calcule des checksums pour détecter toute corruption
Exemples
Types de fichiers
● On peut stocker des données sous forme de fichier texte standard
● Ou sous forme de fichier binaire optimisé pour MapReduce, compressable, splittable : le SequenceFile
● Existe aussi en version permettant des lookups : le MapFile
Lire dans HDFS
Hadoop : The Definitive Guide, O'Reilly
Ecrire dans HDFS
Hadoop : The Definitive Guide, O'Reilly
Map Reduce
Principes de MapReduce
● MapReduce n'est pas un langage, c'est un paradigme de programmation. L'idée est de découper un traitement de données en deux phases.
● La première phase est le Map : c'est là que l'on va
transformer les données en entrée
● La seconde phase est le reduce : on va y aggréger les résultats du Map
Principes de MapReduce
● Le format de base des échanges entre map et reduce est la paire clé / valeur
● La sérialisation des objets est gérée par Hadoop, sous forme de Writable : pas de sérialisation Java native
● Hadoop fournit des types primitifs sérializables, mais on
peut bien sûr fournir ses propres types complexes
● La phase de shuffle, entre map et reduce, va partitionner les données par clé
Principes de MapReduce
Hadoop : The Definitive Guide, O'Reilly
Principes de MapReduce
● Map :
<k1, v1> → list(k2,v2)
● Reduce :
<k2, list(v2)> → list(k3,v3)
Exemple : analyse de logs apache
● Entrées / sorties de Map : <LineNumber, LineContent> → list(URI,Count)
● Exemple d'entrée :
10.51.204.2 - - [28/Mar/2012:04:05:16 +0200] "GET /supervision.jsp HTTP/1.0" 200 2 "-" "HTTP-Monitor/1.1"
10.51.204.1 - - [28/Mar/2012:04:05:16 +0200] "GET /supervision.jsp HTTP/1.0" 200 2 "-" "HTTP-Monitor/1.1"
62.39.140.248 - - [28/Mar/2012:04:05:16 +0200] "GET / HTTP/1.1" 200 118580 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ip-label)"
● Exemple de sortie/supervision.jsp 1
/supervision.jsp 1
/ 1
Exemple : analyse de logs apache
● Entrées / sorties de Map : <URI, list(Count)> → list(URI,Count)
● Exemple d'entrée : /supervision.jsp 1
/supervision.jsp 1
/supervision.jsp 1
/ 1
/ 1
● Exemple de sortie/supervision.jsp 3
/ 2
Eléments de base dans l'API Java
● Tout commence par la définition d'un Job, basé sur une Configuration, et sur des paramètres utilisateurs
Eléments de base dans l'API Java
● On donne à ce job des implémentations de Mapper, Reducer, types des fichiers d'entrée et sortie , types des paramètres.
Eléments de base dans l'API Java
● Le Mapper est très simple : on extrait l'url, et on « émet » un compteur de 1
Eléments de base dans l'API Java
● Le Reducer additionne les valeurs obtenue pour une même clé.
● Hadoop propose pour ce type de Reducer le LongSumReducer.
Eléments de base dans l'API Java
● Si on veut travailler sur des types non primitifs, on peut créer un WritableComparable
Eléments de base dans l'API Java
● On utilise la commande hadoop pour lancer et paramétrer son job
La Streaming API
● L'utilisation d'Hadoop n'est pas réservée aux jobs Java. Tout langage lisant STDIN / STDOUT peut se brancher sur la Streaming API : PHP, Ruby, Python...
● On va spécifier en paramètre les scripts à exécuter lors des phases de map et reduce
La Streaming API : exemple en Ruby
Warnings
Savoir choisir le bon outil
● Parfois des outils standards peuvent suffire
● sed /grep / awk ● SGBD● bashreduce
Complexité et coûts
● Hadoop est certes une solution open source nécessitant du hardware standard
● Mais les coûts de déploiement / monitoring restent élevés
● Et l'apprentissage est long....
L'enfer des versions
● Le versioning d'Hadoop peut laisser perplexe
● Améliorations récentes
● Sortie de la v1.0● Packages Cloudera
L'enfer des versions (en image)
● Le graphe des branches passées et en cours :
http://www.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/
Le client java
● L'API Java possède une ancienne version (deprecated puis un-deprecated), et une nouvelle version
● Beaucoup de méthodes statiques, API pas très intuitive
● Réaliser des joins ou du chainage de jobs est loin d'être trivial
L'écosystème
Un projet parmi d'autres
● Hadoop est utilisable seul, mais de nombreux projets externes facilitent son utilisation
● La plupart de ces librairies ont été développées puis opensourcées par de gros acteurs du web.
Pig● Pig est un DSL qui permet de créer des jobs MapReduce
de manière beaucoup plus simple que l'API native
● Chaque script Pig va être traduit en jobs MapReduce qui vont s'exécuter séquentiellement ou en parallèle.
● Il s'agit de faciliter l'écriture et la lisibilité des jobs, au détriment de leur rapidité d'exécution
● Le DSL s'articule autour de macros comme LOAD, STORE, GROUP BY, COUNT, JOIN, qui rendent simples des tâches complexes à réaliser avec le client Java, et autour d'UDF, User Defined Functions écrites en Java
Pig : exemple de script
Pig : exemple d'UDF
Sqoop
● Le but de Sqoop est de faciliter l'export / import de données entre HDFS et des bases de données externes.
HBase
● Hbase est une base de données orientée colonnes, selon le design du système BigTable de Google
● C'est le seul système orienté temps réel de l'écosystème Hadoop : on peut exécuter des requêtes sans passer par des jobs MapReduce
● C'est un système extrêmement complexe
Et les autres
● Hive : possibilité d'exécuter du sql enrichi sur HDFS
● Flume : framework utilisé pour alimenter HDFS
● Cascading : framework java à base de pipelines
● Avro : système de sérialisation, façon Thrift / ProtocolBuffers
● Mahout : algorithmes de machine learning distribuables
Usecases Ekino
Orange Business Services
● Le but : récolter des tweets et les liens associés, les organiser en catégories, et afficher des visualisations permettant de naviguer par thèmes / périodes
● Un tweet prend peu de place, mais si on récupère le contenu des liens, l'espace disque se réduit vite
● D'où le choix d'Hadoop pour stocker ces tweets et faire passer des jobs calculant des statistiques
Workflow des données
● Un démon est connecté à datasift, et écrit directement les tweets dans HDFS
● Des jobs Hadoop tournent toutes les heures pour calculer les compteurs par catégorie
● Avec Sqoop, on exporte ces résultats vers MySQL
Workflow des données
Perspectives
Les améliorations à venir
● NameNode High Availability
● Nouveau système MapRecuce : YARN
● Meilleur mécanisme de scheduling
Toujours plus de connexions
● Intégration à Microsoft Azure, Excel
● Toujours plus de produits intégrant Hadoop : ETL, bases de données
● Plus de facilité pour provisionner / monitorer un cluster
● Les innovations à venir seront probablement issues d'acteurs commerciaux : Cloudera, Hortonworks
Pour en savoir plus
Les papiers Google
● GFS : http://research.google.com/archive/gfs.html
● MapReduce :http://research.google.com/archive/mapreduce.html
Quelques bons tutorials
● http://developer.yahoo.com/hadoop/tutorial/
● http://hadoop.apache.org/common/docs/current/mapred_tutorial.html
● http://radar.oreilly.com/2011/06/getting-started-with-hadoop.html
Hadoop chez les grands noms du web
● Twitter : http://www.slideshare.net/kevinweil/hadoop-pig-and-twitter-nosql-east-2009
● LinkedIn : http://engineering.linkedin.com/hadoop/user-engagement-powered-apache-pig-and-hadoop
● Facebook : http://www.royans.net/arch/hive-facebook/
● Les plans de Microsoft : http://www.slideshare.net/bradsa/apache-hadoop-for-windows-server-and-windwos-azure
Des blogs à suivre
● http://nosql.mypopescu.com/tagged/hadoop
● http://www.cloudera.com/blog
● http://hortonworks.com/blog/
?????