tests de spark avec la librairie pyspark.¶
Sommaire
Nous allons ici faire fonctionner à nouveau l’algorithme de comptage de mots, mais cette fois-ci rédigé avec pyspsark, la librairie Python qui permet de programmer avec Spark.
Relancer le cluster¶
Il vous faut, dans un premier temps, relancer le cluster que nous avions installé pour le TP Hadoop map-reduce, avec son Namenode et ses deux Datanodes. Tout d’abord, lancer le logiciel Docker Desktop (pour lancer les daemons de Docker). Puis, dans un premier Terminal, tapez :
docker start hadoop-master hadoop-slave1 hadoop-slave2
Entrez alors dans le bash du Namenode :
docker exec -it hadoop-master bash
et lancez alors le daemon hadoop :
./start-hadoop.sh
Vérifiez enfin que HDFS est bien monté, avec la commande :
hadoop fs -ls
wordcount en Spark¶
Entrez dans le répertoire wordcount, listez les fichiers contenus dans ce répertoire :
cd wordcount
ls
Vous voyez apparaître les scripts python Hadoop du TP1. Nous allons maintenant importer le même programme mais rédigé en pyspark.
a. Si vous avez conservé les fichiers sur votre DD :
- Ouvrez un Terminal et rendez-vous dans votre répertoire local (ce répertoire s’appelle :
TP\_BigData\_ECL
). - Mettez à jour ce dépôt avec la commande
git pull
au cas où j’ai fait une MAJ entre les 2 séances
b. Si vous avez supprimé les fichiers de votre DD :
- Depuis un Terminal, dans un répertoire temporaire, exécutez
git clone https://gitlab.ec-lyon.fr/sderrode/TP_BigData_ECL.git
- Copiez le fichier déposé dans le sous-répertoire TP_BigData_ECL/TP_Spark/wordcount sur le Namenode à l’aide des commandes
cd TP_BigData_ECL/TP_Spark/wordcount
docker cp PySpark_wc.py hadoop-master:/root/wordcount
- Revenez au Terminal du compte Linux, et vérifiez que le fichier est là où il est attendu !
Avant de lancer le script, il convient de vérifier que le répertoire sortie n’existe pas déjà sous HDFS. Pour faire cela, on tente de l’effacer (qu’il existe ou non, c’est plus sûr et plus rapide !) :
hadoop fs -rm -r -f sortie
Ensuite, lancez le programme de comptage de mots sur le livre dracula, en local, avec 2 cœurs de votre processeur :
cd wordcount/
spark-submit --deploy-mode client --master local[2] PySpark_wc.py input/dracula
Le Job est exécuté localement, sur le client, en exploitant 2 threads. Le répertoire de sortie est fixé dans le programme Python.
Remarque : Le mode --deploy-mode cluster
permet d’exécuter le programme pilote sur le cluster Hadoop (mode principalement utilisé en phase de production, et non en phase de mise au point). Dans ce cas, il vous faut aussi préciser l’option --master yarn
(puisque notre cluster est géré par Hadoop Yarn, où Yarn est le nom du moteur Hadoop):
spark-submit --deploy-mode cluster --master yarn PySpark\_wc.py input/dracula
Pour vérifier le résultat, scrutez le contenu du répertoire sortie sous HDFS :
hadoop fs -ls sortie
et le contenu des deux fichiers de sortie
hadoop fs -text sortie/part-00000
hadoop fs -text sortie/part-00001
Travail à faire Faites évoluer la version précédente de telle manière que l’on ne garde que les mots qui apparaissent dans le texte au moins X fois, la valeur de X étant fixée par un argument supplémentaire lors de l’appel à spark-submit. Par exemple :
spark-submit --deploy-mode client --master local[2] PySpark_wc.py input/dracula 1000
Tester les scripts vus en cours¶
D’abord, créez un nouveau répertoire, à la racine de votre compte Linux, et déplacez-vous dedans :
cd ..
mkdir pyspark
cd pyspark
Dans le second Terminal, rapatriez l’ensemble des scripts PySpark_ex*.py du répertoire TP_BigData_ECL/TP_Spark/scripts dans le répertoire que nous venons de créer :
for f in PySpark_ex\*.py; do docker cp $f hadoop-master:/root/pyspark; done
Cette boucle ne fonctionnera peut-être pas sous Windows : faites alors le transfert fichier par fichier.
Rapatriez également le programme qui donne une approximation de pi ainsi que le fichier baby_names_2013.csv (utilisé par PySpark_exemple5.py) :
docker cp PySpark_Pi.py hadoop-master:/root/pyspark
docker cp baby_names_2013.csv hadoop-master:/root/pyspark
N’oubliez pas, si nécessaire, d’utiliser dos2unix…
Vous pouvez ainsi tester les scripts vus en cours, par exemple :
spark-submit --deploy-mode client --master local[2] PySpark_Pi.py