Chap 2
Chap 2
Chap 2
Une seule machine n’est pas capable de traiter ou de stocker toutes les
données
Mémoire partagée
Mémoire distribuée
Disque partagé ou non
Hybride
Cluster de SMPs
Bus d’interconnexion
Mémoire partagée
Réseau d’interconnexion
Réseau d’interconnexion
Réseau d’interconnexion
• Grappe de PCs
• Ensemble de nœuds interconnectés par un réseau de
communication à haut débit
• Architecture de déploiement de services sur des Intranets
• Spécificités
Homogénéité
Forte localité
Confiance
Faible coût
Centre de données
Site physique sur lequel se trouvent regroupés des
équipements constituants du système d’information de
l’entreprise
Serveurs
Baies de stockage
Equipements réseaux
Hopper Datacenter2
Stockage ~4 PB 120-480 PB
2http://blog.cloudera.com/blog/2013/08/how-to-select-the-right-hardware-for-your-new-hadoop-cluster/
Un Centre de données
Orienté plus stockage que puissance de calcul
Mise à l’échelle avec des ordinateurs bon marché
Modèle Pay-as-you-go
Parallélisme de tâches
Chaque processeur effectue un traitement différent des autres
Données répliquées (et/ou partitionnées)
Parallélisme hybride
Combinaison des deux stratégies
Amélioration des performances et de la scalabilité
Autre possibilité
Utiliser du pipeline
Mono-processeur
Broadcast
Broadcast
Big Data – 3TEL 13 ENIT – Septembre 2018
Parallélisme de tâches
P0 P1 P2
Tâche 1 Données
Tâche 1 Tâche 2 Tâche 3
Tâche 2 Données
Données Données Données
Tâche 3 Données
P0 P1
Mono-processeur
Tâche 1 Tâche 2
P0 P1 P2
Données Données
Tâche 1 Tâche 2 Tâche 3
P2
Données Données Données Tâche 3
Données
Big Data – 3TEL 14 ENIT – Septembre 2018
Synthèse
Parallélisme de données
Communication
Parallélisme de tâches
Synchronisation
Parallélisme hybride
Compromis entre communication et synchronisation
Équilibrage de charge
Statique ou dynamique
BD BD
BD1
BD2 BD
BD3
BD BD BD
BD1 BD2 BD3
Site 1 Site 2 Site 3 Site 1 Site 2 Site 3
id Nom @
1002 Anis [email protected]
id Nom @ 1003 Hela hela@@gmail.com
1002 Anis [email protected] 1004 Rami [email protected]
1003 Hela hela@@gmail.com Partition 1
1004 Rami [email protected]
1005 Ons [email protected]
1006 Amna [email protected]
Partition 2
id Nom @
1005 Ons [email protected]
1006 Amna [email protected]
id Nom photo
1002 Anis [BLOB]
1003 Hela [BLOB]
1004 Rami [BLOB]
1005 Ons [BLOB]
1006 Amna [BLOB]
Partition 1 Partition 2
id Nom id photo
1002 Anis 1002 [BLOB]
1003 Hela 1003 [BLOB]
1004 Rami 1004 [BLOB]
1005 Ons 1005 [BLOB]
1006 Amna 1006 [BLOB]
Big Data – 3TEL 18 ENIT – Septembre 2018
Systèmes distribués
Pourquoi distribuer ?
Système distribué
Composants sont logés dans différentes machines sur le réseau
Communication et coordination via le passage de messages
Machines autonomes (OS, CPU, RAM)
Nécessite un middleware (intergiciel : entre l’application et l’OS)
HDFS est conçu pour prendre en charge de très gros fichiers. Les
applications compatibles avec HDFS sont celles qui traitent de
grands ensembles de données.
Ces applications n'écrivent leurs données qu'une seule fois, mais
elles les lisent une ou plusieurs fois et exigent que ces lectures
soient satisfaites à des vitesses de streaming.
HDFS prend en charge la sémantique write-once-read-many sur les
fichiers.
Une taille de bloc typique utilisée par HDFS est de 128 Mo. Ainsi,
un fichier HDFS est découpé en blocs de 128 Mo et, si possible,
chaque fragment réside sur un DataNode différent.
Exemple d’application :
Analyser le fichier log d’un serveur web pour trouver
les URLs les plus populaires
3 étapes de MapReduce
Lire les données séquentiellement
Map:
Extraire les informations utiles
Grouper par clé : trier et mêler
Reduce :
Aggréger, résumer, filtrer ou transformer
Produire le résultat
Fonction Map :
(Kin, Vin) list(Kinter, Vinter)
Fonction Reduce :
(Kinter, list(Vinter)) list(Kout, Vout)
def mapper(line):
foreach word in line.split():
output(word, 1)
Soumettre un Job
JobTracker
Si un noeud plante:
Relancer ses tâches courates sur un autre noeud
Relancer les tâches dont les résultats sont perdus
Map:
if(ligne correspond au critère):
output(line)
Reduce: fonction identité
– Alternativement: on n’a pas besoin de reducer
Map:
foreach mot in text.split():
output(mot, nomFichier)
Reduce:
def reduce(mot, nomFichiers):
output(mot, unique(nomFichiers))
Solution à 2 niveaux :
– Job 1:
• Utiliser l’inversion d’index, pour obtenir des
enregistrements de type (mot, liste(nomFichier))
– Job 2:
• Mapper chaque (mot, liste(nomFichier)) à la paire
(occurence, mot)
• Trier ces enregistrement par la clé occurence
counts.save(“out.txt”)
Algorithmes iteratifs
K-means Clustering
121 Hadoop MR
4.1 Spark
Logistic Regression
80 Hadoop MR
0.96 Spark
0 50 100 sec
BaseTransformed
RDD Cache 1
lines = spark.textFile(“hdfs://...”) RDD
Worker
results
errors = lines.filter(_.startsWith(“ERROR”))
messages = errors.map(_.split(‘\t’)(2)) tasks Block 1
Driver
messages.cache()
Action
messages.filter(_.contains(“access”)).count
messages.filter(_.contains(“right”)).count Cache 2
Worker
. . .
Cache 3
Resultat: recherche dans 1 TB Block 2
Worker
on-memory : 7 sec
on-disk : 170 sec
Block 3
Ex:
messages = textFile(...).filter(_.startsWith(“ERROR”))
.map(_.split(‘\t’)(2))