Professional Documents
Culture Documents
Big Data Et Cloud Computing
Big Data Et Cloud Computing
Computing
Présenté par :
2
Big Data et Cloud Computing
Plan du cours 01
Introduction aux architectures
parallèles.
03 Apache Spark
04 Apache Kafka
Introduction à la programmation
05 des processeurs graphique :
GPU (Graphical Processing Unit)
Introduction aux architectures
parallèles 01
Ch. I. Introduction aux architectures parallèles
1. Introduction :
Le traitement parallèle est une forme de traitement de l’information qui exploite les événements concurrents à
plusieurs niveaux:
• au niveau des programmes,
• au niveau des instructions,
• au niveau des opérations.
6
Ch. I. Introduction aux architectures parallèles
Définition 1 : Le calcul parallèle consiste à faire coopérer plusieurs unités de calcul (processeurs, cœurs, …) pour
résoudre le même problème (application). Il consiste à partitionner un gros problème en petits problèmes
indépendants.
Définition 2 : Le calcul parallèle est l’ensemble des techniques logicielles et matérielles permettant l’exécution
d’un programme en utilisant plusieurs unités de calcul plutôt qu’une seule.
Définition 3 : Une machine (un ordinateur) parallèle est une machine composée de plusieurs processeurs qui
peuvent communiquer entre eux.
Architecture mono processeur: Un seul processeur
Les instructions sont exécutées l’une après l’autre.
qui exécute séquentiellement les instructions d’un
programmes.
7
Ch. I. Introduction aux architectures parallèles
2. Principes :
Le principe général consiste à:
• Rechercher les relations de dépendance entre ces tâches et identifier les tâches indépendantes.
• Affecter les tâches indépendantes à des processeurs différents afin d’être exécutées en parallèle
(simultanément).
• Gérer les communication: Gérer les synchronisations et les échanges d’informations entre processeurs.
8
Ch. I. Introduction aux architectures parallèles
2. Principes :
Il faut faire attention:
à l’équilibrage de charge: il faut que la charge entre les différents processeurs soit équitable.
au niveau algorithmique.
9
Ch. I. Introduction aux architectures parallèles
3. Avantages et difficultés du parallélisme :
Avantages :
• Gain en rapidité: augmenter la puissance des calculs ce qui entraine la réduction des temps d’exécution.
Théoriquement, avec p processeur on calcule plus vite qu’avec un seul processeur. Dans le cas idéal, avec p
processeurs, le temps d’exécution est p fois plus rapide qu’avec un seul processeur.
• Gain en taille mémoire: Théoriquement , avec p processeurs, on dispose de p fois plus de mémoire, ce qui
permet de résoudre des problèmes de taille plus grande.
• Exploiter les nouvelles plateformes de calcul : exploiter le parallélisme disponibles dans les processeurs
modernes (multi-coeurs, multithreading, GPU).
10
Ch. I. Introduction aux architectures parallèles
3. Avantages et difficultés du parallélisme :
Difficultés :
• Gérer le partitionnement des tâches: Identifier la concurrence ( identifier les tâches indépendantes).
11
Ch. I. Introduction aux architectures parallèles
3. Avantages et difficultés du parallélisme :
L’introduction du parallélisme a conduit à :
• tenir compte des nouveaux concepts par rapport au modèle séquentiel:
- La concurrence
- La communication
- La synchronisation
• réévaluer les algorithmes séquentiels pour les adapter aux environnements parallèles.
- Partitionnement.
- Ordonnancement.
- La distribution des données
12
Ch. I. Introduction aux architectures parallèles
4. Modèle de programmation :
• La programmation séquentielle est basée sur le modèle Von Neumann (modèle unique):
- un seul flot d’exécution
- une instruction exécutée à la fois
- un processeur
• Pour la programmation parallèle il n’y a pas de modèle unique.
- plusieurs flots d’exécution
- plusieurs instructions exécutées simultanément
- plusieurs processeurs
Différents aspects à considérer
- au niveau architectures,
- au niveau algorithmique,
- au niveau programmation.
13
Ch. I. Introduction aux architectures parallèles
4. Modèle de programmation :
• Programmation dans un langage permettant d’exprimer le parallélisme dans une application réelle
14
Ch. I. Introduction aux architectures parallèles
5. Les différents aspects du parallélisme :
Architecture : comment organiser et implanter de multiples processeurs
• Comment organiser et implémenter de multiples processeurs (Unité de contrôle unique / multiples)
• Comment organiser la mémoire: Partagée ou distribuée
• Topologie des réseaux d’interconnexion: gérer les surcoûts dus aux communications et à l’équilibrage de
charge.
Programmation (Logiciel) :
• Approche de la programmation parallèle: parallélisme de données, parallélismes de tâches
• Débogage des programmes parallèles Correction d’un programme parallèle
• Implémentation
• Environnements et outils spécifiques
Algorithmes :
• Repenser les algorithmes séquentiels pour les adapter aux environnements parallèles afin gagner en
performance.
15
Ch. I. Introduction aux architectures parallèles
6. Modèle des architectures séquentielles :
Les architecture monoprocesseurs sont basées sur le modèle Von
Neumann (1946) qui a donné les grandes lignes pour construire une Mémoire
machine électronique qui est composée de plusieurs blocs
fonctionnels :
• Mémoire : contient le programme (instructions) et les
données. Unité de
UAL
• Unité de contrôle : s’occupe du séquençage des opérations. contrôle
Elle charge les instructions depuis la mémoire.
• Une UAL (Unité Arithmétique et Logique) : Chargée pour
exécuter les instructions.
• I/O : Une unité d’Entrée/Sortie qui sert pour les transferts de I/O
données
16
Ch. I. Introduction aux architectures parallèles
7. Classification des architectures parallèles :
Une bonne connaissance du type d’architecture parallèles permet la recherche et la bonne conception de la
solution au problème à paralléliser. La façon de programmer n’est pas indépendante de la machine utilisée.
• Le flux (flot) de données : séquence des données appelées par le flux d’instructions.
17
Ch. I. Introduction aux architectures parallèles
7.1 Classification de Flynn :
Deux états possibles pour chacun des flux: « single » ou «multiple ». La combinaison des différentes possibilités
conduit aux modèles d’architectures suivants:
• SISD: Single Instruction, Single Data
=> machines séquentielles
18
Ch. I. Introduction aux architectures parallèles
I/O
19
Ch. I. Introduction aux architectures parallèles
Architecture MISD (Multiple Instruction, Single Data) :
Un seul flot de données (SD) alimente plusieurs unités de traitement (MI). Une même donnée est traitée
par plusieurs processeurs en parallèle. Ce type d’architecture est peu implémenté.
Types :
• Modèle avec redondance: plusieurs unités de traitement.
Exemple d’utilisation : exécution de plusieurs algorithmes sur les mêmes données.
Exemple 2 : exécuter plusieurs algorithmes de cryptographie avec les même données.
20
Ch. I. Introduction aux architectures parallèles
Architecture SIMD (Single Instruction, Multiple Data) :
Architecture composée de plusieurs unités de traitement supervisées par la
même unité de contrôle.
Unité de contrôle globale
• Toutes les unités de traitement exécutent la même instruction (SI) sur des
données différentes. Chaque unité de traitement exécute la même
instruction au même instant, ce qui conduit à un fonctionnement synchrone
des processeurs. P1 P2 Pn-1 Pn
• La mémoire partagée entre les différents processeurs peut être subdivisée en
plusieurs modules.
• Les processeurs accèdent à la mémoire via un réseau d’interconnexion. Réseau d’interconnexion
Ce type d’architecture est adapté aux traitements réguliers, comme le calcul
matriciel sur des matrices denses ou le traitement d’images. P1 P2 Pn-1 Pn
Deux sous-classes:
• machines SIMD vectorielles — processeurs de tableaux
• machines SIMD parallèles — tableaux de processeurs
21
Ch. I. Introduction aux architectures parallèles
Architecture MIMD (Multiple Instruction, Multiple Data):
Elle est composée de plusieurs processeurs qui fonctionnent de manière asynchrone:
- Chaque unité de traitement peut gérer un flot d’instructions différent.
- Chaque unité peut opérer sur un flot de données différent.
L’exécution peut être synchrone ou asynchrone.
On peut combiner les deux pour avoir une architecture MIMD hybride à mémoire partagée-distribuée
22
Ch. I. Introduction aux architectures parallèles
7.2 Architecture MIMD à mémoire partagée :
La conception générale des architectures à mémoire partagées est basée sur le principe suivant:
• Tous les processeurs partagent un espace mémoire globale (une mémoire globale) visible par tous les
processeurs.
• Chaque processeur travaille indépendamment des autres. Les échanges entre processeurs s’effectuent via la
mémoire globale par les opérations lecture/écriture.
• Les modifications effectuées par un processeur en mémoire globale sont visibles par tous les autres.
• Les processeurs ont leur propre mémoire locale (cache) dans laquelle sera copiée une partie de la mémoire
globale.
• La cohérence entre ces mémoires locales devra être gérée par le hardware et parfois par l’utilisateur.
23
Ch. I. Introduction aux architectures parallèles
Modèle d’architecture MIMD à mémoire partagée :
Réseau d’interconnexion
M1 M2 Mn Mémoire Globale
24
Ch. I. Introduction aux architectures parallèles
Modèle d’architecture MIMD à mémoire partagée:
Deux classes d’architectures parallèles à mémoire partagée basées sur le temps d’accès à la mémoire:
1. Les architectures UMA (Uniform Memory Access), appelées aussi SMP (Symmetric Multi Processor).
• Gestion de la cohérence des caches CC-UMA (cache coherent UMA) : si un processeur met à jour un
emplacement mémoire partagé, la modification est visible par tous les autres processeurs.
25
Ch. I. Introduction aux architectures parallèles
Modèle d’architecture MIMD à mémoire partagée:
Deux classes d’architectures parallèles à mémoire partagée basées sur le temps d’accès à la mémoire:
2. Les architeures NUMA (Non Uniform Memory Access): signifiant accès mémoire non uniforme et architecture
mémoire non uniforme.
• Conçues pour pallier aux problèmes d’accès mémoire concurrents via un unique bus (Uniform Memory Access).
• En général, c’est un ensemble de plusieurs blocs SMP interconnectés par un lien physique. Un nœud SMP accède
directement à la mémoire d’un autre nœud SMP sans échange de message.
• Le temps d’accès à la mémoire globale n’est pas uniforme, il diffère suivant la zone accédée. Le temps d’accès via
le lien d’interconnexion des blocs SMP est plus lent.
• NUMA représente une position médiane entre le SMP et le clustering (diverses machines).
26
Ch. I. Introduction aux architectures parallèles
7.2 Architecture MIMD à mémoire partagée :
Avantages :
• Programmation simple. Espace d’adresse globale facilite le travail du programmeur.
• Le partage des données entre les tâches est rapide.
Inconvénients :
• Problèmes de conflits d’accès à la mémoire.
• Ne permet pas la scalabilité des accès mémoire: augmenter le nombre de processeurs accroît le trafic sur le
chemin d’accès à la mémoire partagée.
• Le programmeur doit gérer la synchronisation pour un accès correcte à la mémoire globale.
• Construction très couteuse avec un grand nombre de processeurs. Le plus souvent nb proc < 64.
2
Ch. I. Introduction aux architectures parallèles
Mémoire Distribuée :
La conception générale des architectures à mémoire distribuées est basée sur les principes suivants:
• Chaque processeur à sa propre mémoire locale, il n’y a pas de mémoire globale entre les différents processeurs.
• Les processeurs travaillent de manière indépendante. Toute modification d’une mémoire locale n’a pas d’effet
sur les mémoires des autres processeurs.
• Les processeurs sont reliés entre eux par un réseau d’interconnexion pour communiquer entre les mémoires des
différents processeurs. Ces liens sont divers avec des niveaux de performance très variables.
• Les communications entre les processeurs, pour les échanges d’information, s’effectuent via le réseau
d’interconnexion et c’est au programmeur qui doit définir explicitement la communication.
• Les coûts des communications dépendent de la position des processeurs dans le réseau.
28
Ch. I. Introduction aux architectures parallèles
Mémoire Distribuée :
Avantages :
• Scalabilité: on peut augmenter le nombre de processeur et la mémoire proportionnellement.
• Accès rapide à la mémoire locale sur chaque processeur, sans surcoût de gestion de cohérence de cache.
• Coût raisonnable, ex : PCs en réseau.
Inconvénients :
• Surcoût au niveau de développement: Le programmeur doit gérer toutes les communications entre
processeurs.
• Peut être difficile de faire coïncider une structure de données basée sur une mémoire globale, à cette
organisation physique de la mémoire.
• Performance: Pour obtenir des performances, on devra tenir compte du caractère distribué de la mémoire
en utilisant un modèle adapté => algorithme plus compliqué.
• Surcoûts dus aux temps des communications : Les algorithmes utilisés devront minimiser les
communications. En effet l’accès au données, localisées sur les mémoires locales des processeurs, est non-
uniforme. Il dépend de la position du processeur dans le réseau.
29
Ch. I. Introduction aux architectures parallèles
Modèle d’architecture MIMD à mémoire distribuée :
M1 M2 Mn Mémoire privées
Réseau d’interconnexion
30
Ch. I. Introduction aux architectures parallèles
Architecture à mémoire hybride:
• Les ordinateurs les plus puissants au monde sont aujourd’hui un mixte de mémoire partagée et mémoire
distribuée.
• Ces briques sont interconnectées par un réseau (type ethernet, myrinet, Infiniband, ...)
31
Ch. I. Introduction aux architectures parallèles
8. Les composants d’un supercalculateur actuel:
• Processeur: qui donne la puissance des calculs
• Accélérateur:
processeur graphique (GPU) utilisé pour le calcul.
Voir le site www.top500.org pour la liste des machines les plus puissantes au monde.
32
Ch. I. Introduction aux architectures parallèles
9. Bref historique du parallélisme :
• Avant 1980 : accessible uniquement dans quelques pays pour les grosses entreprises (pétrole, automobile),
gouvernement, …
• 1980 – 1990 : premières machines parallèles « abordables »
- Ordinateurs parallèles très performants, mais très peu flexibles
- Problèmes : programmation, portabilité
• 1990 - 2000 : Machines basées sur le regroupement de PC répandus commercialement (Beowulf)
• 2000 - … : SMP, clusters, CC-NUMA, Grilles de calcul
• tendance actuelle :
- Processeurs multi-core.
- Processeurs graphique (GPU): Exploitation des performances des processeurs graphiques.
=> parallélisation obligatoire pour un gain de performance.
=> nécessité d’exploiter le parallélisme aux différents niveaux du hardware.
- Framework de traitement de données en clusters (Hadoop, spark, ….).
33
Ch. I. Introduction aux architectures parallèles
Programmation parallèle
3
Hadoop et Map Reduce 02
Ch. II. Hadoop et Map Reduce
Chaque jour, nous générons 3 trillions d’octets de données 90% des données dans le monde ont été
créées au cours des quatre dernières années.
Sources :
• Capteurs utilises pour collecter les informations climatiques.
• Messages sur les médias sociaux.
• Images numériques et vidéos publiées en ligne.
• Enregistrements transactionnels d’achat en ligne.
36
Ch. II. Hadoop et Map Reduce
Mégadonnées ?
Les mégadonnées ou Big Data sont des collections d’informations qui auraient été considérées comme
gigantesques, impossible à stocker et à traiter, il y a une dizaine d’années.
Répartir les données sur plusieurs machines (jusqu’à plusieurs millions d’ordinateurs) dans des Data Centers
• système de fichiers spécial permettant de ne voir qu’un seul espace pouvant contenir des fichiers
gigantesques et/ou très nombreux (HDFS),
• bases de données spécifiques (HBase, Cassandra, ElasticSearch).
37
Ch. II. Hadoop et Map Reduce
Un Data Center
Imaginez 5000 ordinateurs connectés
entre eux formant un cluster :
38
Ch. II. Hadoop et Map Reduce
Serveur « lame »
Chacun de ces PC lames (blade computer) peut ressembler à ceci (4 CPU multi-cœurs, 1 To de RAM,
24 To de disques rapides, => 5000 euros) :
Il semble que Google utilise des ordinateurs assez basiques, peu chers mais extrêmement nombreux.
39
Ch. II. Hadoop et Map Reduce
Machines connectées
Toutes ces machines sont connectées entre elles afin de partager l’espace de stockage et la puissance de
calcul.
Le Cloud est un exemple d’espace de stockage distribué : des fichiers sont stockés sur différentes
machines, généralement en double pour prévenir une panne.
L’exécution des programmes est également distribuée : ils sont exécutés sur une ou plusieurs machines du
réseau.
Tout ce module vise à enseigner la programmation d’applications sur un cluster, à l’aide des outils Hadoop
40
Ch. II. Hadoop et Map Reduce
1. Haddop ?
Hadoop est un système de gestion de données et de traitements distribués.
Hadoop est un framework Java open source utilisé pour le stockage et traitement des big data. Les
données sont stockées sur des serveurs standard peu coûteux configurés en clusters. Le système de
fichiers distribué Hadoop supporte des fonctionnalités de traitement concurrent et de tolérance aux
incidents.
Le framework Hadoop consiste en deux grandes parties :
• HDFS : stockage des données --> un système de fichier qui répartit les données sur de nombreuses machines,
• YARN : traitement des données --> un mécanisme d’ordonnancement de programmes de type MapReduce ().
Principe :
• Diviser les données,
• Les sauvegarder sur une collection de machines, appelées cluster,
• Traiter les données directement là où elles sont stockées, plutôt que de les copier à partir d’un serveur
distribue.
• Il est possible d’ajouter des machines à votre cluster, au fur et à mesure que les données augmentent.
41
Ch. II. Hadoop et Map Reduce
Présentation du Framework :
La description de Hadoop comme possédant 2 couches (MapReduce et HDFS) est correcte pour la version 1 de Hadoop.
Depuis la version 2, Hadoop a adopté une troisième couche : YARN ("Yet Another Resource Negociator"), un outil de gestion
des ressources distribuée.
42
Ch. II. Hadoop et Map Reduce
Présentation du Framework :
43
Ch. II. Hadoop et Map Reduce
Présentation du Framework :
Parmi ces outils, certaines se trouvent au dessus
de la couche Yern/MapReduce, tel que :
44
Ch. II. Hadoop et Map Reduce
Présentation du Framework :
D’autres outils sont directement au dessus de
HDFS, tel que :
45
Ch. II. Hadoop et Map Reduce
Présentation du Framework :
46
Ch. II. Hadoop et Map Reduce
Présentation du Framework :
47
Ch. II. Hadoop et Map Reduce
1.1 Hadoop File System (HDFS)
• HDFS (Hadoop Distributed File System) est un système de
fichiers distribué (ne pas une base de données).
• Ecrit en java.
48
Ch. II. Hadoop et Map Reduce
1.1 Hadoop File System (HDFS)
• NameNode :
• Démon s’exécutant sur une machine séparée.
• Contient des métadonnées
• Permet de retrouver les nœuds qui exécutent les blocs d’un
fichier.
49
Ch. II. Hadoop et Map Reduce
1.1 Hadoop File System (HDFS)
• Panne de réseau ?
50
Ch. II. Hadoop et Map Reduce
1.1 Hadoop File System (HDFS)
Si le NameNode a un problème ?
51
Ch. II. Hadoop et Map Reduce
1.1 Hadoop File System (HDFS)
Si le NameNode a un probleme :
• Données perdues à jamais.
• Données inaccessibles ?
52
Ch. II. Hadoop et Map Reduce
1.1 Hadoop File System (HDFS)
53
Ch. II. Hadoop et Map Reduce
A la base, le langage java est utilisé, mais grâce à une caractéristique de Hadoop appelée
Hadoop Streaming, il est possible d’utiliser d’autre langages comme Python.
54
Ch. II. Hadoop et Map Reduce
Exemple :
• Imaginons que vous ayez plusieurs magasins que vous gérez à travers le monde.
• Objectif : Calculer le total des ventes par magasin pour l’année en cours.
• Supposons que les lignes du livre aient la forme suivante : Jour Ville Produit Prix
55
Ch. II. Hadoop et Map Reduce
Exemple :
Possibilité :
• Pour chaque entrée, saisir la ville et le prix de vente.
• Si on trouve une entrée avec une ville déjà saisie, on les regroupe en
faisant la somme des ventes.
Dans notre cas, la clé serait l’adresse du magasin, et la valeur c’est le total
des ventes.
56
Ch. II. Hadoop et Map Reduce
Exemple :
• Si on utilise les hashtables sur 1To, problèmes ?
Problème de mémoire ?
Temps de traitement long ?
57
Ch. II. Hadoop et Map Reduce
Map Reduce :
Exemple :
• Map-Reduce : Moyen plus efficace et rapide de traiter ces données.
Les Mappers peuvent travailler en même temps, chacun sur une partie des
données.
58
Ch. II. Hadoop et Map Reduce
Exemple :
Mappers :
• Pour chaque entrée, saisir la ville, et le total des ventes et les
enregistrer dans une fiche.
• Rassembler les fiches du même magasin dans une même pile.
Reducers :
• Chaque Reducer sera responsable d’un ensemble de magasins, il
collectent les fiches qui leurs sont associées des différents Mappers.
• Ils regroupent les petites piles d’une même ville en une seule.
• Ils parcourent ensuite chaque pile par ordre alphabétique des villes
(L.A avant Miami), et font la somme de l’ensemble des
enregistrements.
59
Ch. II. Hadoop et Map Reduce
Map-Reduce :
Fonctionnement : Mappers
• Les Mappers sont de petits programmes qui commencent par traiter
chacun une petite partie des données.
60
Ch. II. Hadoop et Map Reduce
Résultat de l’exemple :
61
Ch. II. Hadoop et Map Reduce
Map-Reduce :
Mappers
Résultat :
Résultat
62
Ch. II. Hadoop et Map Reduce
Map-Reduce (Version 1):
63
Ch. II. Hadoop et Map Reduce
Map-Reduce (Version 1):
MapReduce v1 offre :
JobTracker : C’est un processus qui va s’exécuter sur la même machine que le NameNode,
il divise le travail sur les Mappers et Reducers, s’exécutant sur les différents nœuds.
TaskTracker :
S’exécute sur chacun des nœuds (DataNode) pour exécuter les vraies taches de Map-
Reduce, donc il va s’exécuter pour pouvoir réaliser les taches d’exécution de calcul et de
parcours des fichiers.
64
Ch. II. Hadoop et Map Reduce
Map-Reduce (Version 1):
Fonctionnement :
• Un job Map-Reduce (ou une Application Map-Reduce) est divise sur plusieurs tâches appelées mappers et reducers.
• Chaque tâche est exécutée sur un nœud du cluster
• Chaque nœud a un certain nombre de slots prédéfinis :
Map slots
Reduce Slots
• Un slot est une unité d’exécution qui représente la capacité (ensemble de ressources matérielles qui sont fournis
pour la machine pour pouvoir réaliser certaines opérations) du task tracker à exécuter une tâche individuellement, à
un moment donne.
65
Ch. II. Hadoop et Map Reduce
Map-Reduce (Version 1):
Problèmes de la version 1 :
Le Job Tracker s’exécute sur une seule machine, et fait plusieurs tâches (gestion de ressources, ordonnancement et
monitoring des tâches …)
Problème de scalabilité : les nombreux datanodes existants ne sont pas exploites, et le nombre de nœuds par
cluster limite à 4000.
66
Ch. II. Hadoop et Map Reduce
Map-Reduce V2 (Version 2):
Composants : MapReduce v2
• MapReduce v2 (MR a été divisé en deux) sépare la gestion des ressources de MR API
celle des tâches MP.
• Faire la gestion des ressources grâce à YARN (gestionnaire de ressources).
Framework
• Pas de notion de slots :
• Les nœuds ont des ressources (CPU, mémoire, …) allouées aux
applications à la demande YARN
67
Ch. II. Hadoop et Map Reduce
Map-Reduce V2 (Version 2):
L’ensembre de nouveaux processus qui ont été crées sont :
68
Ch. II. Hadoop et Map Reduce
Lancement d’une Application :
69
Ch. II. Hadoop et Map Reduce
Lancement d’une Application :
70
Ch. II. Hadoop et Map Reduce
Lancement d’une Application :
71
Ch. II. Hadoop et Map Reduce
Lancement d’une Application :
72
Ch. II. Hadoop et Map Reduce
Lancement d’une Application dans un Cluster YARN :
74
Ch. II. Hadoop et Map Reduce
Lancement d’une Application dans un Cluster YARN :
75
Ch. II. Hadoop et Map Reduce
Partie 1 :
Objectif :
Initiation au framework hadoop et au MapReduce, utilisation de docker pour lancer un cluster hadoop de 3 nœuds.
Pour cela je vous propose de suivre le TP1 (https://insatunisia.github.io/TP-BigData/tp1/) donc l’objectif est de
s’adapter et pratiquer le framework hadoop et MapReduce avec une application java (WordCount).
Partie 2 :
Objectif :
Pratiquer le même principe de l’application WordCount mais avec vos propres données (autre que le fichier
purchases.txt de la première partie).
76
THANK YOU