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