Examen de Big Data (Basé sur les questions des images fournies)
Je vais corriger les questions des deux examens en détail, en me basant sur les résumés des
cours fournis ("Big Data Summary.pdf" et les extraits similaires de "Big Data_Résumé.pdf").
Les réponses sont structurées par section, avec explications détaillées, références aux
chapitres pertinents des résumés, et les réponses correctes. Les examens semblent se
chevaucher dans les images, mais je couvre toutes les parties uniques : questions de cours,
Problème 1 (MapReduce/HDFS), Problème 2 (Hive), et l'exercice QCM.
Questions de Cours (2 points)
1. Compléter les étapes d'exécution des Jobs MapReduce :
Le diagramme montre le flux d'exécution d'un job MapReduce. Basé sur le Chapitre 4
(MapReduce) du résumé, voici les étapes complétées avec les labels manquants et une
explication détaillée :
o MapReduce program (le programme écrit par l'utilisateur, en Java ou via des
langages comme Pig/Hive).
o JobClient (exécuté dans une JVM client sur le nœud client) : Le client soumet
le job au JobTracker via l'API JobClient. Cela inclut la configuration du job
(input/output paths, mapper/reducer classes).
o JobTracker (nœud maître, jobtracker) : Reçoit le job, le planifie, divise en
tâches (maps et reduces), et assigne aux TaskTrackers en tenant compte de la
localité des données (data locality pour minimiser les transferts).
o TaskTracker (nœud esclave, tasktracker) : Exécute les tâches dans des JVM
enfants (Child JVM). Chaque tâche lit les données depuis le Distributed file
system (e.g., HDFS), exécute le map ou reduce, et rapporte le statut au
JobTracker.
o Flèche vers Distributed file system (e.g., HDFS) : Les données d'entrée/sortie
sont stockées ici ; les TaskTrackers accèdent aux blocs locaux pour optimiser.
Étapes d'exécution détaillées (flux complet) :
o Soumission : L'utilisateur soumet le job via JobClient (client JVM) au
JobTracker.
o Planification : JobTracker divise l'input en splits (typiquement taille de bloc
HDFS, e.g., 128MB dans BigInsights), assigne des Map tasks aux
TaskTrackers proches des données.
o Exécution Map : TaskTracker lance une JVM enfant pour chaque tâche ; lit
les records via InputFormat/RecordReader, applique le Mapper pour produire
<key, value> pairs.
o Shuffle/Sort : Les outputs des Maps sont partitionnés (via Partitioner, e.g.,
hash), triés, et transférés aux Reducers.
o Exécution Reduce : TaskTracker exécute les Reduces dans JVM enfants ;
agrège les valeurs par clé.
o Output : Résultats écrits dans HDFS.
o Tolérance aux fautes : Si une tâche échoue, JobTracker la relance (jusqu'à 4
tentatives par défaut) ; si TaskTracker échoue (pas de heartbeat), il est retiré.
Référence : Chapitre 4 - JobTracker accepte les jobs, TaskTracker exécute ; phases
Map/Shuffle/Reduce.
2. Décrire le rôle du JobTracker et du TaskTracker :
o JobTracker (Master/Maître) :
Accepte les jobs MapReduce soumis par les clients (via JobClient).
Planifie et coordonne l'exécution : divise le job en tâches
(maps/reduces), assigne aux TaskTrackers en priorisant la localité des
données (data locality) pour réduire les transferts réseau.
Surveille les tâches et les TaskTrackers (via heartbeats) ; gère les
échecs (relance les tâches échouées).
Gère les ressources globales du cluster (e.g., via schedulers comme
FIFO ou Fair Scheduler).
Point unique de défaillance (si JobTracker tombe, le job échoue).
Référence : Chapitre 4 - "Accepts MapReduce jobs... Monitors tasks
and TaskTracker status".
o TaskTracker (Slave/Esclave) :
Exécute les tâches map et reduce assignées par le JobTracker, dans des
JVM enfants (Child JVM) pour isolation.
Gère le stockage et la transmission des outputs intermédiaires (e.g.,
spill to disk pendant le shuffle).
Rapporte périodiquement son statut (heartbeats) et les progrès des
tâches au JobTracker.
Gère les données locales : lit/écrit depuis HDFS, optimise pour les
blocs locaux.
Référence : Chapitre 4 - "Runs map and reduce tasks... Manages
storage and transmission of intermediate output".
Problème 1 : Analyse de Logs avec MapReduce et HDFS (3 points)
1. Donner la commande pour copier les fichiers logs depuis le serveur LOG
/home/logs vers le cluster HDFS /destination/hdfs/logs :
La commande HDFS pour copier des fichiers locaux vers HDFS est hadoop fs -
copyFromLocal (ou -put comme alias). Puisque les logs sont sur un serveur local
(/home/logs), et qu'on copie vers HDFS :
text
hadoop fs -copyFromLocal /home/logs/* /destination/hdfs/logs
Explication : -copyFromLocal copie depuis le filesystem local vers HDFS. Le
o
* copie tous les fichiers du répertoire. Si le répertoire destination n'existe pas,
il sera créé. Pas d'update possible en HDFS (seulement create/delete/copy).
o Référence : Chapitre 3 - "fs – file system shell... copyFromLocal".
2. Créer un schéma illustrant les différentes phases du traitement MapReduce pour
calculer le nombre total de visites par page :
Ce calcul est similaire à un "word count" où la clé est la page visitée, et la valeur est 1
par visite. Phases basées sur Chapitre 4.
Schéma illustré (description textuelle, imaginez un diagramme) :
o Input (de HDFS) : Fichiers logs splités en blocs (e.g., 128MB). Exemple
record : "1234 | PageA | 30 | 2024-01-01 10:15:00".
o Phase Map :
Input : <offset, line> (via InputFormat/RecordReader).
Mapper : Parse la ligne, extrait la page, émet <PageA, 1> (ignorer ID,
temps, date pour ce calcul).
Optionnel : Combiner pour agrégation locale (réduit les données
transférées).
Output : Liste de <page, 1> triés localement.
o Phase Shuffle/Sort :
Grouper par clé (page) via Partitioner (hash pour distribuer aux
reducers).
Trier les valeurs par clé ; merger les outputs des maps.
Transférer aux nodes reducers (data persisted in DFS if needed).
o Phase Reduce :
Input : <page, list(1,1,1,...)>.
Reducer : Somme les valeurs pour chaque clé (e.g., COUNT pour
visites).
Output : <PageA, total_visites> écrit dans HDFS (un fichier par
reducer par défaut).
Flux global :
text
Input Logs (HDFS) → Splits → Map (parse → <page, 1>) → Shuffle (group
by page, sort) → Reduce (sum) → Output (HDFS)
o Explication : #Reducers configurable (< #Mappers). Tolérance : Relance sur
échec. Référence : Chapitre 4 - Phases Map/Shuffle/Reduce.
Problème 2 : Création de Table Hive pour Analyse de Données de Vente (4 points)
1. Expliquer comment importer ces données dans Hive en créant une table
appropriée avec les clauses SQL Like :
Hive utilise un langage SQL-like (HiveQL) pour créer des tables et charger des
données depuis HDFS. Les données sont structurées (délimitées par ','), donc :
o Créer la table : Utilisez CREATE TABLE avec types de données adaptés
(basé sur échantillon : ID string, catégorie string, quantité int, prix double, date
date). Spécifiez le format de ligne (ROW FORMAT DELIMITED FIELDS
TERMINATED BY ',') pour parser les CSV.
o Importer (charger) : Utilisez LOAD DATA INPATH pour déplacer/copier
les données de HDFS vers la table Hive (Hive gère le stockage en HDFS).
LOCAL si depuis local, mais ici fichier sur HDFS.
Explication détaillée : Hive impose un schéma mandatory (contrairement à
o
Pig). Les données restent en HDFS ; Hive ajoute des métadonnées (dans
Metastore). Pas d'update ; seulement inserts. Pour optimisation, ajoutez
partitions (e.g., sur date) ou buckets (hash sur ID).
o Référence : Chapitre 7 - "Hive Data models: Tables... LOAD DATA".
2. Donner la commande Hive pour l'importation des données :
text
CREATE TABLE ventes (
id STRING,
category STRING,
quantity INT,
price DOUBLE,
date DATE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
LOAD DATA INPATH '/path/to/ventes.txt' INTO TABLE ventes;
Explication : STORED AS TEXTFILE pour format CSV simple. INPATH
o
déplace le fichier vers le répertoire Hive (/user/hive/warehouse/ventes). Si
externe : CREATE EXTERNAL TABLE pour pointer sans déplacer.
3. Écrire une requête Hive pour trouver le produit le plus vendu :
text
SELECT id, SUM(quantity) AS total_vendu
FROM ventes
GROUP BY id
ORDER BY total_vendu DESC
LIMIT 1;
Explication : Agrège les quantités par ID produit (GROUP BY), somme
o
(SUM), trie descendant, limite à 1. Hive traduit en MapReduce jobs (Map pour
group, Reduce pour sum).
o Référence : Chapitre 7 - Joins/Group By supportés.
4. Écrire une requête Hive pour analyser la tendance des ventes par catégorie sur
une période donnée :
Assumant une période (e.g., entre deux dates) :
text
SELECT category, date, SUM(quantity * price) AS revenue
FROM ventes
WHERE date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY category, date
ORDER BY category, date;
o Explication : Filtre sur période (WHERE), calcule revenu (quantity * price),
groupe par catégorie/date, trie pour tendance. Pour trend, ajoutez window
functions si Hive 0.11+ (e.g., OVER pour moving average). Hive optimise via
partitions si table partitionnée sur date.
o Référence : Chapitre 7 - "Hive support joins... window functions".
Exercice 4 : QCM (8 points)
Basé sur les résumés (Chapitres 2,3,4,6 pour Hadoop/HDFS/HBase).
1. All of the following accurately describe Hadoop, EXCEPT:
o Real-time (Incorrect : Hadoop est batch-oriented, pas real-time ; stream
computing pour real-time).
o Les autres sont corrects : Open source (Apache), Java-based, Distributed
computing.
2. As part of the HDFS high availability a pair of primary namenodes are
configured. What is true for them?
o The standby node takes periodic checkpoints of active namenode's
namespace. (Vrai approximativement ; en HA, le standby applique les
changements en continu, mais similaire aux checkpoints périodiques de
secondary NN pour merges fsimage/editlog).
o Autres faux : Clients contactent l'active ; les deux sont powered on ; DNs
envoient à both.
3. In a HDFS system with block size 64MB we store a file which is less than 64MB.
Which of the following is true?
o The file will consume less than 64MB. (Vrai : HDFS alloue des blocs partiels
; espace consommé = taille fichier, pas bloc complet).
4. The main role of the secondary namenode is to
o Periodically merge the namespace image with the edit log. (Vrai : Merge
fsimage/editlog pour accélérer startup).
5. Which of the following technologies is a document store database?
o CouchDB (Vrai : Document-oriented ; HBase/Cassandra sont column-
oriented, Hive est SQL-like).
6. What is HBASE?
o Hbase is a "database like" interface to Hadoop cluster data. (Vrai :
Interface database-like pour NoSQL sur Hadoop).
o Autres imprécis : Pas SQL-like (c'est Hive) ; fournit scans, mais c'est plus une
implémentation BigTable.
7. The namenode knows that the datanode is active using a mechanism known as
o h-signal (Probablement heartbeat ; options semblent erronées, mais summary
dit "heartbeats" ; peut-être h-signal comme alias pour heartbeat).
8. Which of the below property gets configured on core-site.xml ?
o Java Environment variables. (Aucun n'est strictement en core-site ;
replication/dirs en hdfs-site, host/port MR en mapred-site. Mais variables env
comme hadoop.security en core-site possiblement).