Vous êtes sur la page 1sur 11

2 Utiliser Spark

2.1 Preparation de l'environnement

1. Spark

Télécharger la version 3.0.3 de Spark compatible avec Hadoop 2.7

https://www.apache.org/dyn/closer.lua/spark/spark-3.0.3/spark-3.0.3-bin-hadoop2.7.tgz

https://dlcdn.apache.org/spark/spark-3.0.3/spark-3.0.3-bin-hadoop2.7.tgz

Puis extraire le répertoire et le placer quelque part. Ex: C:\BigDataSoft\spark-3.0.3-bin-hadoop2.7

2. Hadoop:

Vous pouvez :

extraire le fichier zip fourni avec le cours et le placer quelque part. Ex : C:\BigDataSoft\winutils-

master\hadoop-2.7.1. I

PS: Ici on a juste une petite dépendance à régler sur Windows. Dans le cadre de ce cours, on ne fera
pas en mode HADOOP + SPARK sur votre PC personnel. Le mode du déploiement StandAlone de
SPARK ne dépend pas de Hadoop. Donc théoriquement, nous n'avons pas besoin de HADOOP. En
revanche, spark est fait pour être utilisé sur des servers de Linux. Afin de faire fonctionner Spark sur
Windows, il nous faut donc ce petit plugin de Hadoop dédié au OS Windows. Pour les élèves
motivés, si vous voulez essayer HADOOP + SPARK, vous pouvez télécharger une distribution
complète sur le site https://archive.apache.org/dist/hadoop/common . La version 2.7.X est
recommendée

3. Java:

Vous pouvez

soit utiliser le installer fourni avec le cours jdk-8u202-windows-x64.exe

soit aller sur le site d'Oracle https://www.oracle.com/java/technologies/javase/javase8-archive-


downloads.html pour télécharger JAVA. La version 8 est recommendée

3. Configurer vos variables du système(cf Installation de Mongo)


4. Ainsi la variable PATH

Lorsque tous les étapes sont terminées, tapez spark-shell dans un environnement shell et vous verrez
que Spark aura bien démarré.
C'est donc l'environnement interactif de Spark. Par défaut, le langage utilisé est en Scala.

Vous pouvez ensuite tapez la commande pyspark . Nous avons donc maintenant un environnement de
Spark en Python, dans lequel vous pouvez écrire du code Python. Mais comme on utilise un interpreteur du
Python dans Anaconda, ce mode d'emploi n'est pas bien configuré, donc non recommandée dans le cadre
de ce cours. Et on verra comment écrire du progamme Spark en Python dans Anaconda.

Gardez l'environnement du shell, dans un Web browser ouvrir la page http://localhost:4040/ . C'est donc un
moniteur du cluster de Spark, bien qu'on n'ait qu'un seul Executor(équivalent au worker/slave) dans ce
cluster qui est aussi son propre Driver (équivalent au master)
2.2 Soumettre une tâche au cluster Spark en mode Local

Dans le dossier spark-3.0.3-bin-hadoop2.7\examples\src\main\python , on retrouve des


exemples du Spark écrits en Python. On verra dans cette section comment exécuter ces programmes en
Python.

On fait appel ici à une commande qui s'appelle spark-submit . Rapplons nous que le dossier spark-
3.0.3-bin-hadoop2.7\bin est ajouté dans le PATH du système par une concaténation de
%SPARK_HOME%\bin. En fait dans ce dossier, il y a un tas de commande de Spark, y compris spark-
shell, pyspark et spark-submit
Exécutons donc la commande suivant dans un shell (Attention! on n'est plus dans le mode interactif de
Spark) en utilisant votre chemin du fichier pi.py.

spark-submit --master local[*] /votre/chemin/du/fichier/pi.py 10

Par exemple:

spark-submit --master local[*] C:\BigDataSoft\spark-3.0.3-bin-


hadoop2.7\examples\src\main\python\pi.py 10

10 étant le paramètre demandé par le programme pi.py, il signifie le nb d'itération.

Après environ 7.7 s, la valeur de Pi est estimé à 3.139 (Cette valeur est aléatoire, elle différente de chaque
exécution)

Le temps peut apparaître long pour faire ce petit calcul. Mais vous devez savoir que ce temps comporte le
temps de démarrage du server.

Voici le programme pi.py. Vous arrivez à le comprendre après l'étude des prochains chapitres.
2.3 Démarrage un cluster en mode StandAlone

Linux/mac OS

Vous pouvez démarrer un serveur maître autonome en exécutant :

./sbin/start-master.sh

Une fois démarré, le maître imprimera une URL spark://HOST:PORT pour lui-même, que vous pouvez utiliser
pour y connecter les Workers, ou passer comme argument "maître" à SparkContext. Vous pouvez également
trouver cette URL sur l'interface utilisateur Web du maître, qui est http://localhost:8080 par défaut.

De même, vous pouvez démarrer un ou plusieurs workers et les connecter au master via :

./sbin/start-worker.sh <master-spark-URL>

Une fois que vous avez démarré un worker, regardez l'interface utilisateur Web du maître. Vous devriez voir
le nouveau nœud répertorié ici, ainsi que son nombre de processeurs et de mémoire (moins un gigaoctet
restant pour le système d'exploitation).

Windows:

Utilisons Powershell par exemple :

Vous pouvez démarrer un serveur maître


spark-class org.apache.spark.deploy.master.Master

Récupérons ensuite le URL Spark du server maître, qui est spark://172.17.64.1:7077.

Pour démarrer un serveur Worker, exécuter la commande suivante dans n'importe quelle machine dans le
réseau cluster. Ici on utilisera la même machine.

spark-class org.apache.spark.deploy.worker.Worker spark://ip:port

Dans un nouveau Powershell, saisissez la commande ci-dessus avec le url du master

Dans le moniteur de Master http://localhost:8080/ , on peut voir qu'un noeud Worker est effectivement
ajouté dans le cluster.
2.4 Soumettre une tâche au cluster Spark en mode StandAlone

Nous avons vu préalablement comment soumettre la tâche du calcul de Pi en mode local. De même, nous
pouvons soumettre cette tâche dans un cluster en mode StandAlone. La seule différence est donc la valeur
du paramètre --master.

spark-submit --master spark://ip:port /votre/chemin/du/fichier/pi.py 10

Avec la commande suivante

spark-submit --master spark://172.17.64.1:7077 C:\BigDataSoft\spark-3.0.3-bin-


hadoop2.7\examples\src\main\python\pi.py 100

nous avons donc effectué un calcul avec 100 itération au bout de 85s. La valeur de Pi estimé est donc 3.1408

Nous pouvons confirmer à travers le moniteur que cette tâche est bien ajouté dans notre cluster StandAlone
démarré dans la section précédente.

en cours d'exécution
fin d'exécution

2.5 Installation de Pyspark dans Anaconda

L'installation de PySpark à l'aide de PyPI est la suivante :

pip install pyspark

1. Ouvrir le terminal dans Anaconda


2. Saisir "pip installer pyspark"

3. Installer également la bibliothèque

pip install findspark

2.6 Premier exemple "WordCount"

Préparez d'abord un fichier txt comme celui pour le MapReduce. J'ai saisi le contenu suivant pour
l'illustration et sauvegarder ce fichier sur le chemin C:\BigDataSoft\Input\words.txt

Hello Python
Hello Hadoop
Hello Spark
Spark SQL
Spark Streaming
Spark Flink
Spark Python
Spark Scala

Comme nous avons actuellement 2 copies de Pyspark(une dans la distribution complète de Spark que nous
avons téléchargée manuellement, l'autre dans l'environnement d'Anaconda que nous venons de télécharger
par la commande), nous utilisons le code suivant pour informer notre interprêteur Python quel spark il doit
démarrer. Normalement si vous avez bien configurer les variables d'environnement avec la bonne version
de spark, on ne doit pas avoir du soucis sur Windows. Il y a actuellement une petite incompatibilité de la
version 3.2 avec Windows.
import findspark
findspark.init("C:\BigDataSoft\spark-3.0.3-bin-hadoop2.7")
from pyspark import SparkConf,SparkContext

# create Spark context with necessary configuration


conf = SparkConf().setMaster("local").setAppName("Demo")
sc = SparkContext(conf=conf)

la variable context sc est extrêmement importante dans la programmation en Spark. Elle est crée et
retenue automatique dans un environnement interactif Shell de Spark.

# read data from text file and split each line into words
file_rdd = sc.textFile("C:\\BigDataSoft\\Input\\Words.txt")
words_rdd = file_rdd.flatMap(lambda line: line.split(" "))

# count the occurrence of each word


words_tuple_rdd = words_rdd.map(lambda x:(x,1))
result_rdd = words_tuple_rdd.reduceByKey(lambda a,b: a+b)

print(result_rdd.collect())

Exercice:

1. Exécutez cet exemple dans un shell interactif de Spark


2. Soumettre cet exemple via spark-submit dans les deux modes local et StandAlone.

Vous aimerez peut-être aussi