Hadoop and friends : introduction

72
Introduction à l'écosystème hadoop

Transcript of Hadoop and friends : introduction

Page 1: Hadoop and friends : introduction

Introduction à l'écosystème hadoop

Page 2: Hadoop and friends : introduction

● Introduction● Composants de base du système● HDFS● MapReduce● Warnings ● L'écosystème● Usecases Ekino● Perspectives et liens

Page 3: Hadoop and friends : introduction

Introduction

Page 4: Hadoop and friends : 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

Page 5: Hadoop and friends : introduction

Les usecases typiques

● Analyse de logs

● Business Intelligence

● Transformation de données, ETL-style

● Machine learning : moteurs de recommandations, détection de patterns

Page 6: Hadoop and friends : introduction

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

Page 7: Hadoop and friends : introduction

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

Page 8: Hadoop and friends : introduction

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.

Page 9: Hadoop and friends : introduction

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

Page 10: Hadoop and friends : introduction

Composants de base du système

Page 11: Hadoop and friends : introduction

Les composants Hadoop

● Hadoop se compose de deux systèmes : HDFS et MapReduce

● Cinq types de process vont gouverner ces systèmes

Page 12: Hadoop and friends : introduction

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

Page 13: Hadoop and friends : introduction

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

Page 14: Hadoop and friends : introduction

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

Page 15: Hadoop and friends : introduction

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

Page 16: Hadoop and friends : introduction

Les composants : TaskTracker

● Les TaskTrackers exécute les jobs (Map et Reduce)

● Ils communiquent au JobTracker l'état des jobs

Page 17: Hadoop and friends : introduction

Schéma généralSchéma général

Hadoop in Action, Manning

Page 18: Hadoop and friends : introduction

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

Page 19: Hadoop and friends : introduction

Les fichiers de configuration

Page 20: Hadoop and friends : introduction

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

Page 21: Hadoop and friends : introduction

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.

Page 22: Hadoop and friends : introduction

HDFS

Page 23: Hadoop and friends : introduction

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)

Page 24: Hadoop and friends : introduction

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

Page 25: Hadoop and friends : introduction

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

Page 26: Hadoop and friends : introduction

Exemples

Page 27: Hadoop and friends : introduction

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 

Page 28: Hadoop and friends : introduction

Lire dans HDFS

Hadoop : The Definitive Guide, O'Reilly

Page 29: Hadoop and friends : introduction

Ecrire dans HDFS

Hadoop : The Definitive Guide, O'Reilly

Page 30: Hadoop and friends : introduction

Map Reduce

Page 31: Hadoop and friends : introduction

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

Page 32: Hadoop and friends : introduction

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é

Page 33: Hadoop and friends : introduction

Principes de MapReduce

Hadoop : The Definitive Guide, O'Reilly

Page 34: Hadoop and friends : introduction

Principes de MapReduce

● Map :

<k1, v1>  →  list(k2,v2)  

● Reduce :

<k2, list(v2)>  →  list(k3,v3) 

Page 35: Hadoop and friends : introduction

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

Page 36: Hadoop and friends : introduction

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

Page 37: Hadoop and friends : introduction

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

Page 38: Hadoop and friends : introduction

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.

Page 39: Hadoop and friends : introduction

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

Page 40: Hadoop and friends : introduction

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.

Page 41: Hadoop and friends : introduction

Eléments de base dans l'API Java

● Si on veut travailler sur des types non primitifs, on peut créer un WritableComparable

Page 42: Hadoop and friends : introduction

Eléments de base dans l'API Java

● On utilise la commande hadoop pour lancer et paramétrer son job

Page 43: Hadoop and friends : introduction

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

Page 44: Hadoop and friends : introduction

La Streaming API : exemple en Ruby

Page 45: Hadoop and friends : introduction

Warnings

Page 46: Hadoop and friends : introduction

Savoir choisir le bon outil

● Parfois des outils standards peuvent suffire

● sed /grep / awk ● SGBD● bashreduce

Page 47: Hadoop and friends : introduction

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....

Page 48: Hadoop and friends : introduction

L'enfer des versions

● Le versioning d'Hadoop peut laisser perplexe

● Améliorations récentes 

● Sortie de la v1.0● Packages Cloudera

Page 49: Hadoop and friends : introduction

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/

Page 50: Hadoop and friends : introduction

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 

Page 51: Hadoop and friends : introduction

L'écosystème

Page 52: Hadoop and friends : introduction

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.

Page 53: Hadoop and friends : introduction

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

Page 54: Hadoop and friends : introduction

Pig : exemple de script

Page 55: Hadoop and friends : introduction

Pig : exemple d'UDF

Page 56: Hadoop and friends : introduction

Sqoop

● Le but de Sqoop est de faciliter l'export / import de données entre HDFS et des bases de données externes.

Page 57: Hadoop and friends : introduction

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 

Page 58: Hadoop and friends : introduction

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

Page 59: Hadoop and friends : introduction

Usecases Ekino

Page 60: Hadoop and friends : introduction

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

Page 61: Hadoop and friends : introduction
Page 62: Hadoop and friends : introduction

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

Page 63: Hadoop and friends : introduction

Workflow des données

Page 64: Hadoop and friends : introduction

Perspectives

Page 65: Hadoop and friends : introduction

Les améliorations à venir

● NameNode High Availability

● Nouveau système MapRecuce : YARN

● Meilleur mécanisme de scheduling

Page 66: Hadoop and friends : introduction

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

Page 67: Hadoop and friends : introduction

Pour en savoir plus

Page 68: Hadoop and friends : introduction

Les papiers Google

● GFS : http://research.google.com/archive/gfs.html

● MapReduce :http://research.google.com/archive/mapreduce.html

Page 69: Hadoop and friends : introduction

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

Page 70: Hadoop and friends : introduction

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

Page 71: Hadoop and friends : introduction

Des blogs à suivre

● http://nosql.mypopescu.com/tagged/hadoop

● http://www.cloudera.com/blog

● http://hortonworks.com/blog/

Page 72: Hadoop and friends : introduction

?????