Ceci est une ancienne révision du document !
Montez un cluster spark avec docker
Avant de commencer
Ce TP est noté et se fait en binôme, il est important de vérifier que ces derniers sont corrects sur tomuss (case GroupeTpNote
) et de les modifier sinon. Il ne sera pas possible de changer un groupe après aujourd'hui.
Le TP est normalement faisable dans le temps impartit, vous ne devez pas partir sans avoir fait vérifier, par l'un des enseignants, ce que vous avez réussit à faire. Vous devez aussi rendre un rapport en fin de séance. Un grande partie de la note dépendra de votre capacité à suivre les instructions sur place.
Ne vous inquiétez pas si vous ne parvenez pas à terminer aujourd'hui, vous pourrez terminer des machines et rendre un autre rapport d'ici le 18/2/18, un travail correct à cette date devrait vous assurer la moyenne.
Attention toutes les machines crées aujourd'hui seront supprimées ce weekend, le projet sera détruit. Vous ne devez pas y laisser de données importantes et si vous travaillez chez vous, utilisez un autre projet. Pour poursuivre le projet chez vous il faut donc tout recommencer ailleur
Introduction
Comme la plupart d'entre vous doivent le savoir, Apache Spark est un framework de calcul distribué. Il est généralement assez compliqué de monter un cluster sans aide, mais vous verrez dans ce TP que docker permet de le faire sans vraiment comprendre le fonctionnement interne de ces outils. En effet, il existe de nombreux exemples proposant des dockers prêts à l'emploi lançant des nœuds de cluster. Il suffit donc de les créer avec les bonnes options.
Pour ce TP je me suis basé sur les dockers proposés par gettyimagesgettyimages ils sont légèrement modifiés pour intégrer l'utilisation d'HDFS dans le cluster. Vous pouvez trouver tout le nécessaireici Cette archive contient :
- Un fichier docker-compose qui décrit le lancement d'un cluster sur une seule machine (pour information uniquement).
- Trois répertoires pour générer des images de docker :
- une image qui sera utilisé comme base par les 2 suivantes;
- une image de master (image de base avec un certain script de lancement);
- une image de slave (image de base avec un autre script de lancement).
- Un répertoire avec les configurations nécessaires au master et au slave.
Ces fichiers ne doivent a mon avis pas être modifiés.
Travail à faire
I. Création des VMs
Grâce à docker machine vous devez créer 2 VMs capables de gérer docker. Ces machines doivent se baser sur le snapshot snap-tpnote
et utiliser le gabari (flavor) m1.small
.
- Dans votre rapport, vous fournirez une copie des commandes
docker-machine
utilisées. - Sur tomuss dans les cases TPNoteVM1 et TPNoteVM2 vous donnerez leur IP, dans les cases TPNoteVM1-key et TPNoteVM2-key vous fournirez leur clef ssh (privées)
- La première VM doit s'appeler
manager-vosnom
et la secondeworker-vosnom
Vous devez configurer ces VMs pour participer à un cluster swarm, la première étant nœud manager et la seconde worker.
Enfin vous devez créer un réseau overlay attachable dont le nom est res-spark
et dont les adresses sont 172.30.0.0/24
.
Dans votre rapport, bien sur donnez toutes les commandes utilisées pour faire ces opérations.
II. Création des images
Commencez par créer un registry dans le réseau normal des dockers sur la machine manager et faites en sorte de transférer le port 5000 de l'hôte sur celui du registry.
- Créez les 3 images
hadoopspark-ucbl
,hadoopspark-ucbl-master
ethadoopspark-ucbl-slave
sur le manager. - Ajoutez les 2 images
hadoopspark-ucbl-master
ethadoopspark-ucbl-slave
au registry.
La encore votre rapport doit mentionner toutes les commandes ou modification nécessaires.
III. Création du cluster
Sur le nœud manager créez un master spark et un esclave spark. Sur le nœud worker seulement un esclave spark.
Attention :
Master | Slave1 | Slave2 | |
---|---|---|---|
Réseau | res-spark | ||
IP | 172.30.0.11 | 172.30.0.12 | 172.30.0.13 |
Nom | master | slave1 | slave2 |
Hostname | master | slave1 | slave2 |
Partage de ports | 7077:7077 | 8181:8181 | 8181:8181 |
8080:8080 | |||
Partage de volume | ./conf/master:/conf | /conf/worker:/conf | /conf/worker:/conf |
Host connus | master:172.30.0.11 | master:172.30.0.11 | |
Variables d'environnement | SPARK_CONF_DIR=/conf | SPARK_CONF_DIR=/conf | SPARK_CONF_DIR=/conf |
SPARK_PUBLIC_DNS=localhost | SPARK_PUBLIC_DNS=localhost | SPARK_PUBLIC_DNS=localhost | |