Table of Contents
Wdrożenie aplikacji Apache Spark na platformie Docker
1. Pobierz obraz spark
docker pull spark
2. Utwórz sieć typu bridge
Za pomocą tej sieci program driver łączył się będzie z klastrem Sparka
docker network create -d bridge --subnet=172.22.0.0/16 spark-network
3. Utwórz klaster Spark
Utwórz plik docker-compose.yml. Definiuje on trzy węzły obliczeniowe
- spark-master (o adresie 172.22.0.2:7077)
- spark-worker-1
- spark-worker-2
Interfejs użytkownika węzła master będzie dostępny pod adresem http://localhost:9090/
services:
spark-master:
image: spark
command: /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master
networks:
spark-network:
ipv4_address: 172.22.0.2
ports:
- "9090:8080"
- "7077:7077"
spark-worker-1:
image: spark
command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077
depends_on:
- spark-master
networks:
spark-network:
ipv4_address: 172.22.0.3
environment:
SPARK_MODE: worker
SPARK_WORKER_CORES: 2
#SPARK_WORKER_MEMORY: 4g
SPARK_MASTER_URL: spark://spark-master:7077
spark-worker-2:
image: spark
command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077
depends_on:
- spark-master
networks:
spark-network:
ipv4_address: 172.22.0.4
environment:
SPARK_MODE: worker
SPARK_WORKER_CORES: 2
#SPARK_WORKER_MEMORY: 4g
SPARK_MASTER_URL: spark://spark-master:7077
networks:
spark-network:
external: true
ipam:
config:
- subnet: 172.22.0.0/16
W tym samym katalogu wydaj komendę
docker-compose up
4. Przygotuj plik JAR
[2023/24] Obraz apache/spark zawiera kod:
- w wersji 3.5.0
- napisany w języku Scala 2.12
- skompilowany dla maszyny wirtualnej w wersji JDK 11
Alternatywne kompilacje można pobrać ze strony https://hub.docker.com/_/spark. Dostępne są wersje dla JDK 17
- Skompiluj plik stosując odpowiednią wersję kompliatora
- Przygotuj plik JAR (Artifact w Intellij) nie dołączając bibliotek - które i tak są obecne w węzłach obliczeniowych
5. Uruchom kontener Spark
Przejdź do katalogu, w którym jest zapisany plik JAR.
- Bieżący katalog zostanie zmapowany na katalog roboczy kontenera
/opt/spark/work-dir - Udostępniony zostanie port 4040 (interfejs webowy)
- Kontener zostanie dołączony do sieci spark-network
docker run -it --rm -v ".:/opt/spark/work-dir" -p 4040:4040 --network spark-network spark /bin/bash
6. Prześlij program do węzła master
Parametrami komendy spark-submit są:
- adres węzła
spark:172.22.0.2:7077 - nazwa klasy z funkcją
main()która ma zostać uruchomiona - nazwa pliku JAR
- Dodatkowe opcje to rozmiar pamięci programu driver oraz węzła obliczeniowego
/opt/spark/bin/spark-submit --driver-memory 4g --executor-memory 4g --class org.example.Main --master spark://172.22.0.2:7077 pi_application.jar
