Le but de ce conseil rapide est de fournir au lecteur les informations nécessaires pour déployer un cluster Apache Spark composé de :
- Un Master
- Un ou plusieurs Workers
Ce cluster peut être utilisé à diverses fins : expérimenter avec Apache Spark ou construire une suite de tests d’intégration.
Prérequis
Il n’y a que deux prérequis pour exécuter ce que nous allons décrire dans les sections suivantes : Docker et Docker Compose.
Une fois installés, tapez les commandes suivantes pour vous assurer que tout fonctionne correctement :
Variables d'environnement
Il est généralement judicieux d’isoler les variables de contexte dans un fichier dédié, qui dans ce cas s’appelle “.env”. Ce fichier est placé à côté du fichier principal (docker-compose.yml).
version: "3.6"
volumes:
dfs:
name: "dfs"
driver: local
services:
spark-master:
image: apache/spark:${SPARK_TAG}
ports:
- ${SPARK_MASTER_HTTP_HOST_PORT}:8080
- ${SPARK_MASTER_HOST_PORT}:${SPARK_MASTER_CONTAINER_PORT}
command: /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master >> logs/spark-master.out
volumes:
- dfs:/var/data
networks:
static-network:
ipv4_address: ${SPARK_MASTER}
spark-worker-1:
image: apache/spark:${SPARK_TAG}
environment:
- SPARK_WORKER_DIR=/opt/spark/work-dir
- SPARK_WORKER_PORT=${SPARK_WORKER_1_CONTAINER_PORT}
- SPARK_WORKER_CORES=1
- SPARK_WORKER_MEMORY=2048m
command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://${SPARK_MASTER}:${SPARK_MASTER_CONTAINER_PORT}
ports:
- ${SPARK_WORKER_1_HOST_PORT}:${SPARK_WORKER_1_CONTAINER_PORT}
- ${SPARK_WORKER_1_WEB_CONTAINER_PORT}:8081
volumes:
- dfs:/var/data
depends_on:
- spark-master
networks:
static-network:
ipv4_address: ${SPARK_WORKER_1}
spark-worker-2:
image: apache/spark:${SPARK_TAG}
environment:
- SPARK_WORKER_DIR=/opt/spark/work-dir
- SPARK_WORKER_PORT=${SPARK_WORKER_2_CONTAINER_PORT}
- SPARK_WORKER_CORES=1
- SPARK_WORKER_MEMORY=2048m
command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://${SPARK_MASTER}:${SPARK_MASTER_CONTAINER_PORT}
ports:
- ${SPARK_WORKER_2_HOST_PORT}:${SPARK_WORKER_2_CONTAINER_PORT}
- ${SPARK_WORKER_2_WEB_CONTAINER_PORT}:8082
volumes:
- dfs:/var/data
depends_on:
- spark-master
networks:
static-network:
ipv4_address: ${SPARK_WORKER_2}
networks:
static-network:
ipam:
config:
- subnet: ${CONTAINERS_NETWORK_SUBNET}
docker compose
Le docker-compose.yml est le nom de fichier par défaut que Docker Compose attend lorsque vous souhaitez l’exécuter.
Le descripteur ci-dessus lance un cluster Apache Spark composé de :
- un master
- deux workers
Si vous souhaitez avoir plus de deux workers, créez une nouvelle section worker en copiant l’une des deux existantes (n’oubliez pas de lui donner un nom unique et d’ajouter les variables d’environnement correspondantes dans le fichier .env mentionné plus haut).
Le cluster “émule” un système de fichiers distribué (dfs, dans l’exemple) en utilisant un volume partagé entre les trois nœuds.
Il n’y a pas grand-chose de plus à dire. Ouvrez un terminal, placez-vous dans le répertoire où se trouvent les deux fichiers mentionnés ci-dessus et :
> docker-compose up
En quelques instants (selon les ressources de votre machine), votre cluster est prêt.
Le master et les workers fournissent également une console web. Les hôtes et les ports dépendent de ce que vous avez indiqué dans le fichier .env. Voici la console web du master dans mon cluster :