====== 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