Introduction au Big Data et Hadoop
Introduction au Big Data et Hadoop
2021-2022
Les organisations n'ont plus à gérer simplement leurs propres données le succès futur
dépendra dans une large mesure de leur capacité à extraire de la valeur des données d’autres
organisations.
Le problème est simple:
Un lecteur typique à 1990 pouvait stocker 1370 Mo de données et avait une
vitesse de transfert de 4,4 Mo / s, et environ cinq minutes pour que vous puissiez
lire toutes les données d'un lecteur complet.
20 ans plus tard, les lecteurs de 1 téraoctet sont la norme, mais la vitesse de
transfert est environ 100 Mo / s, il faut donc plus de deux heures et demie pour lire
toutes les données du disque.
C'est long pour lire toutes les données sur un seul lecteur et l'écriture est
encore plus lente.
Imaginez si nous avions 100 disques, en parallèle, chacun contenant un centième des données,
nous avons pu lire les données en moins de deux minutes.
Le premier problème à résoudre est la défaillance matérielle: dès que vous
commencez à utiliser de nombreux composants matériels, le risque que l'un d'entre
eux échoue est assez élevé.
Une manière courante d'éviter la perte de données est la réplication: des
copies redondantes des données sont conservées par le système afin qu'en
cas de panne, une autre copie soit disponible. C'est ainsi que fonctionne
RAID
Bien que le système de fichiers distribué Hadoop (HDFS), adopte une
approche légèrement différente.
Le deuxième problème est que la plupart des tâches d'analyse doivent pouvoir
combiner les données d'une manière ou d'une autre, et les données lues à partir
d'un disque peuvent devoir être combinées avec les données de l'un des 99 autres
disques.
Différents systèmes distribués permettent de combiner des données provenant de plusieurs
sources. MapReduce fournit un modèle de programmation qui fait abstraction du problème
des lectures et des écritures de disque, le transformant en un calcul sur des ensembles de clés
et de valeurs. Il y a deux parties dans le calcul - la map et la réduction - et c’est l’interface
entre les deux où se produit le «mixing». Comme HDFS, MapReduce a une fiabilité intégrée.
3. Exigences
Le volume de données n’est pas le seul moyen pour catégoriser le Big Data. Par exemple,
l'analyste Doug Laney a décrit le Big Data en termes de ce que l'on appelle maintenant les
3V:
4. Hadoop
Hadoop est un framework libre et open source écrit en Java destiné à faciliter la création
d'applications distribuées permettant aux applications de travailler avec des milliers de
nœuds. Ainsi chaque nœud est constitué de machines standard regroupées en grappe.
Hadoop a été inspiré par la publication de MapReduce, GoogleFS et BigTable de Google.
Hadoop a été créé par Doug Cutting et fait partie des projets de la fondation logicielle Apache
depuis 2009.
Hadoop relève les défis du Big Data en simplifiant la mise en œuvre d'applications
distribuées. Il permet de diviser les tâches en fragments de travail et de les répartir sur des
milliers d'ordinateurs en offrant un temps d'analyse rapide et un stockage distribué de
quantités massives de données multi-structurées. Il fournit un mécanisme évolutif et fiable
pour traiter de grandes quantités de données sur un cluster de matériel de base.
Hadoop diffère des approches distribuées précédentes des manières suivantes:
Les données sont diffusées à l'avance.
Les données sont répliquées dans un cluster d'ordinateurs pour assurer la fiabilité
et la disponibilité.
Le traitement des données se produire là où les données sont stockées, éliminant
ainsi les goulots d'étranglement de la bande passante.
La caractéristique la plus importante de Hadoop est la séparation nette entre la programmation
et l'infrastructure : Il prend en charge et cache la complexité de l'infrastructure.
L’écosystème Hadoop se compose des éléments suivants:
HDFS est un système de fichiers distribué qui s'exécute sur de grands clusters et
fournit un accès à haut débit aux données.
o Les données sont traitées sur les nœuds sur lesquels elles sont stockées.
HDFS est un système hautement tolérant aux pannes et conçu pour fonctionner avec
du matériel standard.
L'indépendance des nœuds de cluster les uns aux autres garantit l'évolutivité.
Caractéristiques de HDFS:
Stockage évolutif pour les fichiers volumineux: HDFS a été conçu pour stocker
des fichiers volumineux avec la possibilité d’évoluer vers des clusters comprenant
des milliers de nœuds.
Réplication: HDFS réplique les blocs de données sur plusieurs machines dans un
cluster, ce qui rend le système fiable et tolérant aux pannes. La taille de bloc par
défaut utilisée est de 64 Mo et le facteur de réplication par défaut est de 3.
Accès aux flux de données en continu « Streaming Data Access »: HDFS a été
conçu pour diffuser des patterns d'accès aux données et fournit des lectures et des
écritures en continu à haut débit.
Ajout à un fichier « Appends »: HDFS a été conçu à l'origine pour avoir des
fichiers immuables. Les fichiers une fois écrits sur HDFS ne pouvaient pas être
modifiés par l’écriture ou par l’ajout au fichier. Les versions récentes de HDFS ont
introduit la fonctionnalité d'ajout à un fichier.
Architecture d’HDFS
HDFS est implémenté comme un système de fichiers structuré par blocs de taille fixe
dans un cluster Hadoop.
Les DataNodes sont des démons ou processus esclaves qui s'exécutent sur chaque
machine esclave.
Un fichier peut être composé de plusieurs blocs, qui sont stockés sur différents
DataNodes (DN). Par conséquent, l'accès à un fichier nécessite l'accès à plusieurs
DataNodes.
o Le DataNode stocke chaque bloc dans un fichier séparé sur son système de
fichiers local.
o Le DataNode ne crée pas tous les fichiers dans le même répertoire. Il utilise
une heuristique pour déterminer le nombre optimal de fichiers par répertoire et
sous-répertoires de manière appropriée.
Les DataNodes exécutent les requêtes de lecture et d’écriture de bas niveau à partir
des clients du système de fichiers.
Ils envoient périodiquement des pulsations au NameNode pour signaler la santé
globale de HDFS, par défaut, cette fréquence est définie sur 3 secondes.
L'une des exigences de ce système de fichiers est la gestion et l’accès rapide aux
métadonnées de fichier (informations sur les fichiers et les blocs : noms, autorisations,
emplacements, etc.).
Contrairement aux fichiers d’HDFS (qui sont accessibles dans un modèle à écriture
unique et à lecture multiple), les métadonnées d’autres fichiers peuvent être modifiées
par un grand nombre de clients simultanément. Cependant, il est important que ces
informations ne soient jamais désynchronisées.
o HDFS résout ce problème en introduisant une composante spéciale dédiée,
appelée NameNode, qui stocke toutes les métadonnées du système de fichiers
à travers le cluster. Cela signifie que HDFS implémente une architecture
maître / esclave. Un seul NameNode (qui est un serveur maître) gère l'espace
de noms du système de fichiers et régule l'accès aux fichiers par les clients.
NameNode enregistre les métadonnées de tous les fichiers stockés dans le cluster, par
exemple
o l'emplacement des blocs stockés,
o la taille des fichiers,
o les autorisations,
o la hiérarchie, etc.
Deux fichiers sont associés aux métadonnées:
o FsImage: il contient l'état complet de l'espace de noms du système de fichiers
depuis le début du NameNode.
o EditLogs: il contient toutes les modifications récentes apportées au système de
fichiers, donc l'état la plus récente de FsImage.
Il enregistre chaque modification apportée aux métadonnées du système de fichiers.
Par exemple,
o si un fichier est supprimé dans HDFS, le NameNode l'enregistrera
immédiatement dans EditLog.
Il reçoit régulièrement un Heartbeat et un rapport de blocage de tous les DataNodes du
cluster pour s'assurer que les DataNodes sont actifs.
Il garde un enregistrement de tous les blocs dans HDFS et dans quels nœuds ces blocs
sont situés.
Le NameNode est également chargé de prendre en charge le facteur de réplication de
tous les blocs. En cas de défaillance du DataNode, le NameNode choisit de nouveaux
DataNodes pour les nouvelles répliques, équilibre l'utilisation du disque et gère le
trafic de communication vers les DataNodes.
L'existence d'un seul maître NameNode dans un cluster simplifie grandement
l'architecture du système.
L’architecture maître « NameNode » / esclave « DataNode » de HDFS crée un point
de défaillance : perdre le NameNode signifie effectivement perdre HDFS. Pour
atténuer quelque peu ce problème, Hadoop implémente un NameNode secondaire.
Le NameNode secondaire lit constamment tous les systèmes de fichiers et
métadonnées de la RAM du NameNode et les écrits sur le disque dur ou le système de
fichiers.
Il est responsable de la combinaison des EditLogs avec FsImage du NameNode.
Il télécharge les EditLogs à partir du NameNode à intervalles réguliers
La nouvelle FsImage est recopiée dans le NameNode, qui est utilisé chaque fois que le
NameNode est (re)démarré ou pour la restauration en cas de panne
Le NameNode effectue des points de contrôle réguliers dans HDFS. Par conséquent, il
est également appelé CheckpointNode.
Pour éviter ce problème, HDFS réplique chaque bloc sur un certain nombre de
machines (trois, par défaut).
Configuration du pipeline
Avant l’'écrire sur les blocs, le client confirme si les DataNodes, présents dans
chacune des listes d'adresses IP, sont prêts à recevoir les données ou non. Ce faisant, le
client crée un pipeline pour chacun des blocs en connectant les DataNodes individuels
dans la liste respective de ce bloc.
Un pipeline de données est un concept faisant référence aux étapes de transport des
données d’une source vers une cible
La réplication des données dans HDFS est implémentée dans le cadre d'une opération
d'écriture sous la forme d'un pipeline de données.
o Lorsqu'un client écrit des données dans un fichier HDFS, ces données sont d'abord
écrites dans un fichier local.
o Le fichier local accumule un bloc complet de données, le client consulte le
NameNode pour obtenir une liste des DataNodes affectés aux réplicas de ce bloc.
o Le client écrit ensuite le bloc de données dans le premier DataNode.
o Le DataNode stocke les blocs reçus dans un système de fichiers local et transmet
ces données au DataNode suivant dans la liste jusqu'à ce que le dernier DataNode
de réplicas reçoive les données.
Si l'un des DataNodes échoue pendant que le bloc est en cours d'écriture, il
sera supprimé du pipeline. Quand l'opération d'écriture sur le bloc actuel se
termine, le NameNode le réplique à nouveau pour compenser le réplica
manquant (causé par l'échec du DataNode).
o Lorsqu’un fichier est fermé, les données restantes du fichier local temporaire sont
mises en pipeline vers les DataNodes.
Le client informe alors le NameNode que le fichier est fermé.
À ce stade, le NameNode valide l'opération de création de fichier.
Si le NameNode meurt avant la fermeture du fichier, le fichier est perdu.
o Chaque DataNode envoie périodiquement un message de pulsation (heartbeat) au
NameNode, qui est utilisé par le NameNode pour découvrir les échecs de
DataNode (en fonction des pulsations manquantes).
o Le NameNode marque les DataNodes sans pulsation récents comme morts et ne
leur envoie aucune nouvelle demande d'E/S.
o La mort de DataNode peut faire chuter le facteur de réplication de certains blocs en
dessous de leurs valeurs spécifiées.
Par conséquent, le NameNode suit en permanence les blocs et lance la
réplication chaque fois que nécessaire.
Exemple de configuration du pipeline
Le client choisira le premier DataNode dans la liste (IP DataNode pour le bloc
1) qui est DataNode 1 et établira une connexion TCP / IP.
Le client informera DataNode 1 d'être prêt à recevoir le bloc. Il fournira
également les adresses IP des deux prochains DataNodes (2 et 4) au DataNode
1 où le bloc est censé être répliqué.
Le DataNode 1 se connectera au DataNode 2.
Le DataNode 1 informera DataNode 2 d'être prêt à recevoir le bloc et lui
donnera l'adresse IP du DataNode 4.
Ensuite, DataNode 2 indiquera au DataNode 4 d'être prêt à recevoir les
données.
Ensuite, la confirmation de disponibilité suivra la séquence inverse, c'est-à-dire
du DataNode 4 à 2 puis à 1.
Enfin, DataNode 1 informera le client que tous les DataNodes sont prêts et
qu'un pipeline sera formé entre le client, DataNode 1, 2 et 4.
La configuration du pipeline est maintenant terminée et le client va enfin
commencer le processus de diffusion des données « Data Streaming »
Opération de lecture dans HDFS