• Hadoop est un framework open source conçu pour le stockage distribué
et le traitement de grandes quantités de données sur des clusters de serveurs.
Il est basé sur le modèle de programmation MapReduce, initialement développé
par Google. Hadoop permet le stockage et le traitement parallèle de données
sur des clusters de serveurs, offrant ainsi une échelle horizontale pour traiter
des ensembles de données massifs.
Les composants principaux d'Hadoop comprennent Hadoop Distributed File System
(HDFS) pour le stockage distribué et Hadoop MapReduce pour le traitement parallèle
des données. Hadoop est largement utilisé dans le domaine du big data pour traiter et
analyser des ensembles de données massifs, souvent dans le cadre de tâches telles
que l'analyse de données, l'apprentissage automatique, et d'autres applications liées
à la gestion de données à grande échelle.
• MapReduce est un modèle de programmation et un framework logiciel
développé par Google pour le traitement parallèle de grands ensembles de
données sur des clusters de serveurs. Ce modèle a été popularisé par Google,
puis implémenté dans le framework open source Apache Hadoop. Le processus
de traitement des données avec MapReduce se divise en deux phases
principales : la phase Map et la phase Reduce.
Phase Map :
Map Function : La fonction Map prend en entrée un ensemble de données et les divise
en paires clé-valeur. Chaque paire clé-valeur est ensuite traitée indépendamment par
différentes tâches Map qui s'exécutent en parallèle sur les nœuds du cluster. La sortie
de la fonction Map est une liste de paires clé-valeur intermédiaires.
Phase Reduce :
Shuffle and Sort : Les résultats intermédiaires produits par les tâches Map sont
regroupés et triés par clé. Ceci assure que toutes les valeurs associées à une clé
particulière sont regroupées ensemble.
Reduce Function : La fonction Reduce prend les paires clé-valeur triées, les traite et
produit le résultat final du traitement. Chaque tâche Reduce s'occupe d'un sous-
ensemble des clés.
MapReduce offre une abstraction puissante pour le traitement parallèle de données
distribuées, facilitant ainsi le traitement de grandes quantités de données sur des
clusters de serveurs. Bien que Hadoop ait popularisé l'utilisation de MapReduce,
d'autres frameworks et outils ont également émergé pour répondre aux besoins de
traitement de données massives, tels que Apache Spark.
Hadoop Distributed File System (HDFS) est un système de fichiers distribué
conçu pour stocker de très grandes quantités de données sur des clusters de
serveurs. HDFS fait partie intégrante de l'écosystème Apache Hadoop, un
framework open source utilisé pour le traitement distribué de données
massives.
Voici quelques caractéristiques et concepts clés liés à HDFS :
Répartition des données : HDFS divise les fichiers en blocs de données,
généralement de taille fixe (par exemple, 128 Mo ou 256 Mo). Ces blocs sont
ensuite distribués sur différents nœuds du cluster.
Redondance des données : Pour garantir la tolérance aux pannes, chaque bloc
de données est répliqué sur plusieurs nœuds du cluster. Si l'un des nœuds
échoue, les données peuvent être récupérées à partir de l'une des copies de
réplication.
Architecture maître-esclave : HDFS suit une architecture maître-esclave. Le
nœud maître, appelé NameNode, gère le namespace du système de fichiers et
maintient la métadonnée, tandis que les nœuds esclaves, appelés DataNodes,
stockent les données proprement dites.
Fiabilité et évolutivité : HDFS est conçu pour être hautement fiable et évoluer
horizontalement. Il peut gérer des volumes de données massifs sur des clusters
composés de nombreux nœuds.
Accès aux données : HDFS offre un accès en lecture et en écriture aux
données, mais il est optimisé pour un modèle d'écriture en une seule passe, ce
qui le rend adapté aux applications de traitement de données distribuées
comme MapReduce.
HDFS est souvent utilisé en conjonction avec d'autres composants d'Hadoop
pour fournir une plateforme complète de gestion et d'analyse de données
massives. Son architecture distribuée et sa capacité à traiter des ensembles de
données massifs en font un choix populaire dans le domaine du big data.
• YARN, acronyme de "Yet Another Resource Negotiator", est un
composant clé de l'écosystème Apache Hadoop. Il s'agit d'un gestionnaire de
ressources conçu pour permettre le traitement distribué des données sur des
clusters de serveurs. YARN a été introduit dans Hadoop 2.x pour remplacer le
modèle de gestion de ressources limité de la version précédente, qui était
principalement basé sur MapReduce.
Voici quelques points clés concernant YARN :
Gestion des ressources : YARN permet de gérer efficacement les ressources
du cluster, notamment la CPU et la mémoire. Il alloue dynamiquement les
ressources aux différentes applications en fonction de leurs besoins.
Modèle d'exécution multiple : Contrairement à la version précédente d'Hadoop,
qui était principalement axée sur MapReduce, YARN prend en charge plusieurs
modèles d'exécution. Cela signifie que divers frameworks de traitement de
données, tels que Apache Spark, Apache Flink, et d'autres, peuvent coexister
et s'exécuter sur le même cluster.
Composants principaux :
ResourceManager : Le ResourceManager est le composant maître de YARN.
Il est responsable de la gestion des ressources du cluster et de l'attribution de
ces ressources aux différentes applications.
NodeManager : Chaque nœud dans le cluster a un composant NodeManager,
qui est responsable de l'exécution des tâches sur le nœud local, de la gestion
des ressources locales et de la communication avec le ResourceManager.
Applications multi-utilisateurs : YARN prend en charge l'exécution simultanée
de plusieurs applications sur le même cluster, offrant ainsi une meilleure
utilisation des ressources partagées.
Évolutivité : YARN est conçu pour être scalable, ce qui signifie qu'il peut gérer
de manière transparente des clusters de différentes tailles, allant de quelques
nœuds à plusieurs milliers de nœuds.
En résumé, YARN joue un rôle central dans la gestion des ressources et
l'exécution d'applications distribuées sur un cluster Hadoop, offrant ainsi une
flexibilité accrue pour le traitement de données massives au-delà du modèle
MapReduce.
• Apache Hive est un système de traitement de données distribué construit
au-dessus de Hadoop. Il fournit un langage de requête SQL (HiveQL) similaire
à SQL traditionnel, permettant aux utilisateurs d'écrire des requêtes pour
analyser et interroger les données stockées dans Hadoop Distributed File
System (HDFS). Hive facilite l'analyse de données massives en offrant une
interface SQL-like, ce qui le rend plus accessible aux utilisateurs familiers avec
le langage SQL.
Quelques caractéristiques importantes de Hive :
Langage HiveQL : HiveQL est un langage de requête similaire à SQL qui
permet aux utilisateurs d'écrire des requêtes pour interroger et analyser des
données. Il est plus accessible pour ceux qui sont familiers avec SQL, même
s'il ne prend pas en charge toutes les fonctionnalités SQL standard.
Stockage des métadonnées : Hive utilise un service de stockage des
métadonnées appelé Metastore pour stocker les informations sur la structure
des tables, les schémas, etc. Cela permet à Hive de fournir un modèle de
données structuré au-dessus des données stockées dans HDFS.
Optimisation des requêtes : Hive tente d'optimiser les requêtes pour améliorer
les performances en générant des plans d'exécution efficaces. Cependant, Hive
n'est pas aussi rapide que les bases de données relationnelles traditionnelles
pour des requêtes interactives en raison de sa nature basée sur MapReduce.
Formats de données variés : Hive prend en charge divers formats de données,
y compris des formats de sérialisation tels que JSON et Parquet, facilitant ainsi
l'intégration avec différents types de données.
Extensibilité : Hive est extensible, ce qui signifie que les utilisateurs peuvent
étendre ses fonctionnalités en ajoutant des UDFs (User-Defined Functions)
pour prendre en charge des opérations personnalisées.
Bien que Hive facilite l'analyse de données massives, il est important de noter
qu'il peut y avoir des limitations en termes de performances pour des requêtes
interactives en raison de son modèle de traitement basé sur MapReduce. Des
technologies plus récentes comme Apache Spark avec Spark SQL sont souvent
utilisées pour des cas d'utilisation nécessitant des performances plus élevées.
• Apache Pig est un langage de haut niveau et une plateforme pour le
traitement et l'analyse de données massives sur des clusters Hadoop. Il
simplifie le développement d'applications de traitement de données en
fournissant un langage appelé Pig Latin, conçu pour exprimer des opérations
de transformation de données de manière simple et lisible.
Voici quelques points clés à connaître sur Apache Pig :
Langage Pig Latin : Pig Latin est le langage de script utilisé dans Apache Pig.
Il offre une syntaxe expressive et facile à comprendre pour décrire des
opérations de traitement de données. Les scripts Pig Latin sont traduits en
séquences de tâches MapReduce pour être exécutés sur un cluster Hadoop.
Modèle de programmation orienté flux de données : Apache Pig suit un modèle
de programmation orienté flux de données, ce qui signifie que les opérations de
transformation sont exprimées sous forme de flux de données plutôt que de
séquences impératives d'instructions.
Optimisation automatique : Pig optimise automatiquement les requêtes et les
traduit en tâches MapReduce, simplifiant ainsi le processus de développement
tout en permettant une certaine optimisation des performances.
Traitement de données semi-structurées : Pig est bien adapté au traitement de
données semi-structurées, telles que des enregistrements avec des champs
optionnels, ce qui peut rendre le processus plus flexible par rapport à certaines
autres approches.
Évolutivité : Comme il s'exécute sur Hadoop, Pig offre une évolutivité
horizontale, permettant de traiter de grandes quantités de données sur des
clusters distribués.
Bibliothèque d'opérateurs : Pig propose une variété d'opérateurs intégrés pour
effectuer des opérations de traitement de données courantes, facilitant ainsi la
création de scripts pour des tâches telles que le filtrage, le tri, le groupage, etc.
Apache Pig est particulièrement utile dans des scénarios où des tâches
complexes de transformation de données doivent être réalisées sur de grandes
quantités de données stockées dans HDFS. Son approche déclarative et son
langage de script en font un outil accessible pour les personnes qui ne sont pas
nécessairement des experts en programmation distribuée.
• Jaql est un langage de requête et de transformation de données utilisé
principalement dans le contexte du traitement et de l'analyse de données
massives. Il a été développé par IBM et est conçu pour être utilisé avec le
framework d'analyse de données massives Apache Hadoop.
Voici quelques caractéristiques clés de Jaql :
Approche déclarative : Jaql est un langage de requête déclaratif, ce qui signifie
que l'utilisateur spécifie ce qu'il veut obtenir plutôt que de décrire comment
atteindre le résultat. Cela le rend similaire à des langages tels que SQL.
Traitement de données semi-structurées : Jaql est particulièrement adapté au
traitement de données semi-structurées et non structurées. Il prend en charge
des formats de données variés, y compris JSON.
Pipeline de données : Les requêtes Jaql sont construites sous forme de
pipelines, où chaque étape du traitement produit un ensemble de données en
sortie, qui est ensuite utilisé comme entrée pour l'étape suivante.
Extensibilité : Jaql est extensible, ce qui signifie que les utilisateurs peuvent
développer leurs propres fonctions pour effectuer des opérations
personnalisées.
Intégration avec Hadoop : Jaql est généralement utilisé en conjonction avec
Apache Hadoop. Il peut être utilisé pour exprimer des transformations de
données complexes qui seront ensuite exécutées sur des clusters Hadoop.
Optimisation des requêtes : Jaql effectue des optimisations de requêtes pour
améliorer les performances, ce qui permet d'exploiter efficacement la puissance
de traitement parallèle des clusters Hadoop.
Bien que Jaql ait été utilisé dans le passé, il est important de noter que son
développement actif a été arrêté, et il n'est pas aussi largement utilisé que
certains autres langages et frameworks plus récents dans l'écosystème big
data, tels que Apache Spark avec Spark SQL. Les utilisateurs cherchant des
solutions plus modernes peuvent explorer d'autres alternatives en fonction de
leurs besoins spécifiques
• Apache Spark est un framework open source de traitement de données
massives et de calcul distribué. Il offre une alternative plus rapide et plus flexible
à MapReduce, le modèle de traitement de données associé à Apache Hadoop.
Spark est conçu pour être rapide, extensible et compatible avec divers types de
charges de travail, notamment le traitement par lots, le traitement en temps réel,
le machine learning, et le traitement de graphes.
Voici quelques caractéristiques clés d'Apache Spark :
Performances élevées : Spark est réputé pour ses performances élevées,
principalement en raison de son utilisation de la résilience en mémoire (in-
memory computing). Il peut stocker des données intermédiaires en mémoire,
réduisant ainsi la nécessité de lire et d'écrire fréquemment sur le disque.
Modèles de programmation polyvalents : Spark propose plusieurs API de
programmation, dont Spark Core (pour le traitement par lots), Spark SQL (pour
les requêtes SQL), Spark Streaming (pour le traitement en temps réel), MLlib
(pour le machine learning), et GraphX (pour le traitement de graphes). Cela
rend Spark polyvalent et adapté à divers cas d'utilisation.
Resilience et tolérance aux pannes : Spark offre la tolérance aux pannes grâce
à son modèle de résilience, permettant aux tâches échouées d'être reprises
sans redémarrer tout le processus.
Compatibilité Hadoop : Spark peut s'intégrer étroitement avec Hadoop,
s'appuyant sur le stockage HDFS et prenant en charge divers formats de
données Hadoop. Il peut également être utilisé de manière indépendante, sans
dépendre de Hadoop.
Traitement en temps réel : Spark Streaming permet le traitement en temps réel
et peut traiter les flux de données de manière incrémentielle, ce qui en fait une
solution pour les applications nécessitant des analyses en temps réel.
Facilité d'utilisation : Spark propose des interfaces utilisateur conviviales et des
API dans plusieurs langages de programmation, dont Scala, Java, Python, et
R, facilitant ainsi son adoption par une large communauté de développeurs.
Évolutivité horizontale : Spark est conçu pour évoluer horizontalement sur des
clusters de machines, permettant ainsi de traiter efficacement de grandes
quantités de données.
Apache Spark a gagné en popularité en raison de ses performances élevées,
de sa polyvalence et de sa facilité d'utilisation, devenant ainsi un choix courant
pour le traitement de données massives dans divers secteurs.
• NoSQL (Not Only SQL) est un terme générique utilisé pour décrire une
classe de systèmes de gestion de bases de données qui diffèrent des bases de
données relationnelles traditionnelles. Ces systèmes NoSQL sont conçus pour
répondre à des besoins spécifiques en matière de stockage et de récupération
de données, notamment pour des applications nécessitant une scalabilité
horizontale, une gestion de données semi-structurées ou non structurées, et
des opérations de lecture/écriture intensives.
Voici quelques caractéristiques clés des bases de données NoSQL :
Modèles de données flexibles : Les bases de données NoSQL peuvent gérer des
données semi-structurées ou non structurées, ce qui signifie qu'elles peuvent stocker
des données sans un schéma fixe prédéfini, contrairement aux bases de données
relationnelles.
Scalabilité horizontale : Les systèmes NoSQL sont souvent conçus pour évoluer
horizontalement, ce qui signifie qu'ils peuvent facilement être étendus en ajoutant de
nouveaux nœuds au cluster pour gérer un volume croissant de données et de trafic.
Performances élevées : Certains systèmes NoSQL sont optimisés pour des
opérations de lecture/écriture intensives et peuvent offrir des performances élevées,
en particulier dans des scénarios où la cohérence immédiate des données n'est pas
une exigence stricte.
Types de bases de données NoSQL :
Bases de données de documents : Stockent des données sous forme de documents,
généralement au format JSON ou BSON. Exemples : MongoDB, CouchDB.
Bases de données de paires clé-valeur : Stockent des paires clé-valeur, où chaque
clé est associée à une valeur. Exemples : Redis, Amazon DynamoDB.
Bases de données de colonnes : Stockent les données de manière orientée colonne
plutôt que ligne, ce qui est efficace pour les requêtes analytiques. Exemples : Apache
Cassandra, HBase.
Bases de données de graphes : Optimalisées pour stocker et interroger des structures
de graphes. Exemples : Neo4j, ArangoDB.
Absence de langage de requête standardisé : Contrairement aux bases de données
relationnelles qui utilisent généralement SQL, chaque système NoSQL a souvent son
propre langage de requête spécifique.
Adaptation à des cas d'utilisation spécifiques : Les bases de données NoSQL sont
souvent utilisées dans des cas d'utilisation tels que le web, les médias sociaux,
l'Internet des objets (IoT), le stockage de données volumineuses, etc.
Il est important de noter que le choix entre une base de données relationnelle et une
base de données NoSQL dépend des exigences spécifiques de chaque application.
Les bases de données NoSQL ne remplacent pas nécessairement les bases de
données relationnelles, mais plutôt elles offrent des alternatives adaptées à des
scénarios particuliers.
• MongoDB est une base de données NoSQL orientée documents,
développée par MongoDB Inc. Elle appartient à la catégorie des bases de
données de documents, ce qui signifie qu'elle stocke et interroge des données
sous forme de documents au format BSON (Binary JSON). MongoDB est conçu
pour être flexible, évolutif et adapté à une variété de cas d'utilisation, notamment
ceux nécessitant une gestion efficace de données semi-structurées ou non
structurées.
Voici quelques caractéristiques clés de MongoDB :
Modèle de données basé sur des documents : Les données dans MongoDB sont
stockées sous forme de documents BSON, qui sont des représentations binaires de
documents JSON. Chaque document peut avoir une structure différente, ce qui offre
une grande flexibilité.
Collections et documents : Les données sont organisées dans des collections, qui
sont des ensembles de documents. Chaque document peut avoir un schéma différent,
ce qui permet d'ajouter ou de supprimer des champs sans affecter l'ensemble de la
collection.
Indexation : MongoDB prend en charge l'indexation pour améliorer les performances
des requêtes. Les index peuvent être créés sur n'importe quel champ dans un
document.
Requêtes riches : MongoDB prend en charge des requêtes riches et puissantes, y
compris des requêtes complexes, des agrégations, des index géospatiaux, et plus
encore.
Évolutivité horizontale : MongoDB est conçu pour l'évolutivité horizontale, ce qui
signifie qu'il peut être facilement étendu en ajoutant de nouveaux nœuds au cluster
pour gérer un volume croissant de données et de trafic.
Réplication : MongoDB prend en charge la réplication pour assurer la haute
disponibilité. Les données peuvent être répliquées sur plusieurs nœuds, permettant
une récupération rapide en cas de panne.
Sharding : MongoDB offre la possibilité de partitionner les données, appelé sharding,
pour distribuer la charge de travail sur plusieurs serveurs et améliorer les
performances.
Langage de requête : MongoDB utilise un langage de requête similaire à JSON pour
effectuer des opérations de lecture/écriture. Il propose également une interface de
requête en langage de programmation adaptée aux différentes bibliothèques clientes.
Utilisation dans le développement web : MongoDB est souvent utilisé dans le
développement web, notamment avec des frameworks comme [Link], grâce à sa
nature JSON-like et à sa capacité à stocker des données JSON de manière native.
MongoDB est fréquemment utilisé dans des applications nécessitant une flexibilité
dans le schéma de données, un traitement de données semi-structurées ou non
structurées, ainsi que dans des scénarios nécessitant une évolutivité horizontale et
une haute disponibilité.
Soit un fichier de données décrive les cas covid dans plusieurs régions chaque ligne
décrit un arbre :
1. continent
2.région
[Link] des cas confirmés
[Link] des décès
[Link] des cas rétablis
[Link] des cas actives
Question 1 : ecrire un programme MapReduce qui donne la région (champ2) qui a eu
le plus des décès (champs4)