2. Pourquoi
Nous avons vu la différence entre les deux possibilités de scaling pour
traiter un gros volume de données
Hadoop a été créé pour traiter un gros volume de données de manière
distribuée
Doug Cutting travaille chez Google après être passé chez les meilleurs
(Excite, Apple, Xerox, …)
Il a créé le projet de moteur de recherche Lucene (porté par Apache) (nous
en reparlerons)
Le premier vrai projet Hadoop est né chez Yahoo (10 000 cœurs !, x10
aujourd’hui)
Utilisé par Facebook avec 30 Po de données
2
3. Les pilliers
Architecturaux :
Le stockage : HDFS
La gestion des nœuds et des tâches : YARN
Le stockage d’objets : Ozone
Le Traitement : Map Reduce
Plusieurs distributions plus ou moins open source
Hortonworks
Cloudera
MapR
3
5. HDFS
Système de stockage de fichiers (Filesystem)
La manière dont une machine stocke ses fichiers
Par exemple FAT32 et NTFS pour Windows, ext2, ext3 pour Linux.
Il en existe un grand nombre en fonction des usages ou des constructeurs de
machines
Il est :
Distribué, c’est à dire réparti sur plusieurs machines
Extensible : on peut l‘étendre à volonté en rajoutant des machines
Portable : il n’est pas liée à un système d’exploitation
5
6. Principes
Stocke de très gros volumes
Composés de gros fichiers
Taille mini 64 Mo, à comparer aux 1ko de nos Pc’s
Il abstrait l’architecture physique de stockage
Vu par l’utilisateur comme un disque dur unique
6
7. Architecture
Deux composants principaux
Le NameNode, qui sait ou sont rangés les fichiers et qui est unique
Les DataNode, qui stockent des morceaux de fichiers et qui peuvent les
restituer
7
8. Namenode
Deux composants principaux
Le NameNode, qui sait ou sont rangés les fichiers
Semble à la FAT (File allocation Table) d’un disque dur
Il gère l’espace de noms
Il centralise la répartition des blocs de données dans le cluster
Il est unique
SPOF (Single Point Of Failure)
On peut définir un NameNode secondaire, en cas de panne
8
9. DataNode
Stocke et restitue les blocs de données
En Lecture :
Le Namenode est interrogé pour localiser les blocs de données
Pour chaque bloc, il dit quel DataNode est le plus apte (bande passante) à
fournir la réponse
Réplication
Permet d’assurer la haute disponibilité
Périodiquement, les dataNodes indique quels blocs ils détiennent au
NameNode
Si celui-ci estime que le donnée n’est pas présente dans assez de DataNode, il
met en route une réplication (par défaut trois réplications)
Mécanisme qui ressemble (de loin) au RAID
9
13. Inconvénients
Le NameNode est unique
Il peut constituer un goulot d’étranglement si l’on accède à beaucoup de petits
fichiers (Hadoop n’est pas fait pour cela, il y a d’autres outils)
Peut se contourner à l’aide des espaces de noms (NameSpace) qui peuvent être
servis par des NameNode différents
C’est un SPOF (Single Point Of Failure), même si un basculement manuel vers
une copie est possible
13
14. YARN (Yet Another Resource Negotiator)
Une trousse à outils
Pour gérer les ressources du cluster
Pour planifier (Scheduling) des tâches (Jobs)
Est devenu un système d’exploitation distribué
Supprime la forte dépendance entre HDFS et MapReduce
On peut dissocier le stockage de l’exploitation des données
Permet par exemple :
Des applications interactives
Le traitement de flux de données
14
15. YARN
Resource Manager
Gestionnaire de ressource global
Accepte les tâches
Les planifie
Leur alloue des ressources
Node Manager
Surveille l’état des ressources et transmet au ResourceManager
Containers de ressources
Assigne les ressources allouées par le Node Manage à une application
Autorise les applications opportunistes : elle se lancent quand des
ressources sont disponibles
15
16. Ozone
Stockage objet pour HDFS
Permet de gérer un très grand nombre de petits fichiers
Outrepasse une limitation classique de HDFS
Permet de gérer des milliers de nœuds
Base consistante
Modèle RAFT (Reliable, Replicated, Redundant and Fault-Tolerant)
Fiable
Répliqué
Redondant
Tolérant à la panne
Tests sur https://www.katacoda.com/
16
17. Zookeeper
Indispensable pour tous les outils Hadoop
Peut être utilisé de manière indépendante de Hadoop
Gestionnaire de configuration pour système distribués
Haute disponibilité, services redondants
17
18. Map Reduce
Un Framework (cadre) de programmation
Et donc une nouvelle manière de penser les choses
Une architecture maitre – esclave
Le système découpe les données pour distribuer les tâches
On apporte le traitement là ou sont les données, et non l’inverse
C’est un système tolérant à la panne
La parallèlisation est cachée à l’utilisateur, il n’a pas à la gérer
Le processus peut être récursif
Il travaille en mémoire
18
19. Map Reduce
Découpe les tâches en deux opérations
Map :
On transforme chaque donnée en une autre
Sur chaque nœud du cluster
Reduce
Le nœuds fond remonter leurs données vers le nœud parent
Les données sont consolidées par le nœud parent pour fournir la (les) réponse(s)
19
21. Map
Le nœud analyse, découpe et délègue
Associe à un couple (clef, valeur) un autre couple (clef2, valeur2)
21
Map( clef1, valeur1) -> list(clef2, valeur2)
Map (void * Document) {
int cles = 1;
foreach mot in document
Calcul(mot, cles);
}
22. Reduce
Le nœud analyse, découpe et délègue
Associe à un couple (clef, valeur) un autre couple (clef2, valeur2)
22
Reduce( clef2, list(valeur2)) -> valeur3
Reduce(int clefs, Interator values) {
int result = 0;
foreach v in values
result += v;
}
23. MapReduce et ses limites
Ne peut être utilisé que par des langages de bas niveau (pas de type SQL p.ex.)
Pas de gestion des index, donc pertes de performances (les index ont été inventés pour
cela)
Un seul flot de données
un jeu de donnée en sortie
Une seule donnée en sortie
La tolérance aux pannes et la mise à l’échelle n’optimisent pas les entrées-sorties
Map et Reduce sont des opérations bloquantes
i.e. tous les Map() doivent être terminés pour lancer Reduce()
23
24. Combiner
On peut améliorer les choses en précalculant sur les nœuds
P.ex. un maximum existe sur chaque nœud, il y est calculé puis envoyé à
reduce
Cela permet de transférer moins de données
Et de moins charger le nœud du reducer
24
25. Pig
Un langage pour faire du Map Reduce
Inspiré de Java
Peut être aussi utilisé en Python, Javascript, Ruby ou Groovy
25
26. Pig : un exemple 26
input_lines = LOAD '/tmp/my-copy-of-all-pages-on-internet' AS (line:chararray);
-- Extract words from each line and put them into a pig bag
-- datatype, then flatten the bag to get one word on each
Row_words = FOREACH input_lines GENERATE FLATTEN((line)) AS word;
-- filter out any words that are just white spaces
filtered_words = FILTER words BY word MATCHES 'w+’;
-- create a group for each word
word_groups = GROUP filtered_words BY word;
-- count the entries in each group
word_count = FOREACH word_groups GENERATE (filtered_words) AS , group AS word;
-- order the records by count
ordered_word_count = ORDER word_count BY
DESC; STORE ordered_word_count INTO '/tmp/number-of-words-on-internet';
27. Hive
Entrepôt de données
Utilisateurs
Développé par Facebook
Utilisé par Netflix
En place sur Amazon (un fork, c’est-à-dire Hive + des fonctionnalités ajoutées)
Permet un requêtage par un langage proche de SQL (Hive Query Language)
Fonctionnalité ACID
Pas de transactions
Indexation « faible »
En interne, Hive traduit les requêtes
en Graphe Orienté Acyclique (MapReduce ou Tez)
En Jobs Spark
27
28. Permet d’utiliser Hadoop avec d’autres langages que Java (p.ex. Python)
Il s’agit d’une API vers MapReduce
Les interfaces se font à l’aide des entrés-sorties standard Un*x (stdin,
stdout)
Parfaitement adapté à du traitement par ligne de chaines de caractères
La sortie de map est un couple clef-valeur séparé par une tabulation
Hadoop trie les valeurs par clef et les passe à reduce
28
Hadoop streaming