4. 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
5. Les usecases typiques
●
Analyse de logs
●
Business Intelligence
●
Transformation de données, ETL-style
●
Machine learning : moteurs de recommandations,
détection de patterns
6. 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
7. 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
8. Les origines d'Hadoop
●
Au commencement, deux publications Google :
●
The Google File System (GFS) : a scalable
distributed file system for large distributed dataintensive applications
●
●
MapReduce: Simplified Data Processing on Large
Clusters
Ces systèmes décrivent la nouvelle infrastructure
Google, et restent propriétaires.
9. 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
12. 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
13. 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
14. 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
15. 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
18. 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
20. 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
21. 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.
23. 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)
24. 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
25. 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
27. 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
31. 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
32. 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é
35. 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
36. 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
37. 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
38. 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.
39. 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
40. 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.
41. Eléments de base dans l'API Java
●
Si on veut travailler sur des types non primitifs, on
peut créer un WritableComparable
42. Eléments de base dans l'API Java
●
On utilise la commande hadoop pour lancer et
paramétrer son job
43. 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
46. Savoir choisir le bon outil
●
Parfois des outils standards peuvent suffire
●
sed /grep / awk
●
SGBD
●
bashreduce
47. 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....
48. L'enfer des versions
●
Le versioning d'Hadoop peut laisser perplexe
●
Améliorations récentes
●
Sortie de la v1.0
●
Packages Cloudera
49. 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/
50. 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
52. 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.
53. 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
56. Sqoop
●
Le but de Sqoop est de faciliter l'export / import de
données entre HDFS et des bases de données
externes.
57. 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
58. 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
60. 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
62. 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
65. Les améliorations à venir
●
NameNode High Availability
●
Nouveau système MapRecuce : YARN
●
Meilleur mécanisme de scheduling
66. 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
70. Hadoop chez les grands noms du web
●
●
●
●
Twitter : http://www.slideshare.net/kevinweil/hadoop-pig-andtwitter-nosql-east-2009
LinkedIn : http://engineering.linkedin.com/hadoop/userengagement-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-windowsserver-and-windwos-azure
71. Des blogs à suivre
●
http://nosql.mypopescu.com/tagged/hadoop
●
http://www.cloudera.com/blog
●
http://hortonworks.com/blog/