--
CorentinSanchez - 2017-09-12
Il serait très utile de pouvoir utiliser le calcul distribué de Spark via un notebook Jupyter. Cela permettrait aux scientifiques d'exécuter directement des codes et des calculs très lourds sur le serveur/master Jupyter/Spark directement ici, à l'observatoire, près des données.
Pour cela j'ai trouvé plusieurs solutions.
Il propose des noyaux pour le notebook pour utiliser Spark avec Scala, R, Python .
Il utilse un serveur web apache livy pour faire le lien entre le notebook et le cluster Spark.
J'ai eu des problèmes d'installation, les kernels ne démarrent pas.
https://github.com/jupyter-incubator/sparkmagic
Toree
Une autre façon d'installer des kernels spark, qui semble plus prometteuse
https://toree.apache.org/docs/current/user/installation/
Pyspark
C'est fonctionnel !
Pyspark est le noyau Spark pour python. on peut l'installer tout seul. Les deux autres méthodes l'utilisent.
Configuration :
#Env pour Spark dans Jupyter
export SPARK_HOME=/usr/lib/spark
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=/usr/bin/python3.5
export PYSPARK_DRIVER_PYTHON=$PYSPARK_PYTHON
Dans le notebook, rajouter import Pyspark, et c'est parti !
Essai d'automatisation pour configurer l'environnement
http://jupyter-notebook.readthedocs.io/en/latest/config.html
$ jupyter notebook --generate-config
génère le fichier .jupyter/jupyter_notebook_config.py
Deux variantes du script : 1 ou 2 :
#import os
#import sys
1#import subprocess
1#subprocess.call('sqsub -np ' + '/home/sanchez/.jupyter/env.sh', shell=True)
2#os.environ['SPARK_HOME']="/usr/lib/spark/"
2#os.environ['PYTHONPATH']="$SPARK_HOME/python/:$PYTHONPATH"
2#os.environ['PYTHONPATH']="$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPAT"
dans .jupyter/env.sh
1export SPARK_HOME=/usr/lib/spark
1export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
1export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
Mais ça ne marche pas !
Encore un autre essai
SOLUTION
Et avec Docker ?
Pourquoi pas lancer spark dans un docker swarm pour le déployer rapidement ?
il y a plusieurs images de spark, mais la soumission de taches (spark-submit) est compliquée avec le création d'un container de soumission pour chaque tâche.
Le notebook ne sait pas soumettre ses jobs ainsi