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
med/spark_on_docker.txt · Last modified: 2023/11/29 16:36 by pszwed
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0