Skip to content

Part 1 : Hadoop MapReduce

Oussama Ben Khiroun edited this page Nov 14, 2021 · 6 revisions

Arborescence

~
└──formation/
    ├── code
    │   ├── mapper.py
    │   ├── reducer.py
    │   └── reducer2.py
    └── data
        ├── joboutput		(chiffres d'affaires par magasin; voir "reducer.py") 
        │   └── part-00000
        │ 
        ├── joboutput3		(magasin ayant le chiffre d'affaire max; voir "reducer2.py")
        │   └── part-00000
        └── purchases.txt       (dataset)

Remarque : Les fichiers sont disponbiles en téléchargement depuis le dépôt principal ⏬

A. Test des scripts MapReduce sur disque local (sans Hadoop)

Tester les deux programmes sur le disque local (avec les redirections ou pipes)

Remarque : La commande sort joue le rôle de shuffle dans Hadoop.

Seules les 50 premières lignes du dataset sont testées. On suppose que le repertoire de travail courant est code/

	head -50 ../data/purchases.txt | ./mapper.py | sort | ./reducer.py

B. Utilisation de Hadoop pour MapReduce

  1. Créer un répertoire "myinput" sur le HDFS de Hadoop
	hadoop fs -mkdir myinput
  1. Mettre le fichier sur le HDFS (rep. de travail courant code/)
	hadoop fs -put ../data/purchases.txt myinput
  1. Vérifier la présence du fichier sur HDFS
	hadoop fs -ls myinput
  1. Lancer le MapReduce sur Hadoop (rep. de travail courant code/)
	hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.13.0.jar -mapper mapper.py -reducer reducer.py -file mapper.py -file reducer.py -input myinput -output joboutput
  1. Afficher le fichier résultat à partir de HDFS (fichier nommé par défaut part-00000)
	hadoop fs -cat joboutput/part-00000
  1. Charger les fichiers résultats à partir de HDFS sur le disque local (rep. de travail courant code/)

Remarque : Les fichiers résultats sont disponibles en téléchargement sous data/ (voir arborescence en haut)

	hadoop fs -get joboutput ../data/

⚠️ Annexes

Description des scénarios de MapReduce

1️⃣ Scénario 1 : Calculer les chiffres des ventes annuels par magasin et les afficher dans le format à 2 colonnes :

(voir programme reducer.py et fichier résultat part-00000 sous joboutput)

Nom_magasin1    Ventes1
Nom_magasin2    Ventes2
Nom_magasin3    Ventes3
...             ...

2️⃣ Scénario 2 : Calculer et afficher le chiffre des ventes du magasin ayant le plus grand chiffre d'affaire dans une seule ligne :

(voir programme reducer2.py et fichier résultat part-00000 sous joboutput3)

Nom_magasin    Ventes

Autres remarques

  1. Il faut autoriser les programmes Python à être exécutés en leurs accordant le droit d'exécution avec chmod comme suit

    chmod 777 mapper.py

    chmod 777 reducer.py

  2. Quelques commandes Linux ne fonctionnent pas en les rattachant avec hadoop fs telles que head et tree (par contre tail fonctionne).

Clone this wiki locally