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