Spark-Cluster und Pyspark mit Hilfe von Docker

Voraussetzung

  • Python 3.8 (Die Python-Vesion muss mit der Version im Pyspark-Image übereinstimmen)

Start des "Clusters"

Quelle: https://spark.apache.org/docs/latest/spark-standalone.html

Definieren des Netzes

docker network create spark-net

Start des Master-Knoten

# Start Master
docker run --name spark -dit --rm -p 8080:8080 -p 7077:7077 --network spark-net apache/spark /bin/sh -c "/opt/spark/sbin/start-master.sh -h 0.0.0.0 ; sleep 3600"

WebUI: http://localhost:8080/

Der Master terminiert nach einer Stunde automatisch!

Start mehrere Worker-Knoten

# start serveral Worker nodes
for i in `seq 1 3`
do
  echo $i
  docker run --name spark-worker-$i  -dit --rm -p 808$i:808$i --network spark-net apache/spark /bin/sh -c "/opt/spark/sbin/start-worker.sh -h 0.0.0.0 spark://spark:7077 ; sleep 3600"
done

Jeder Worker hat ein eigenes UI, das (ausgehend von dem WebUI des Masters) aufgerufen werden kann.

Alle Worker terminieren nach einer Stunde automatisch!

Spark Client installation

Für den Access als Client muss lokal eine Client-Installation existieren.

https://spark.apache.org/downloads.html (in dem Fall spark-3.5.1-bin-hadoop3.tgz)

### Extracing and expanding the Path
mkdir -p ~/spark-3.5
cd ~/spark-3.5
# on macos, the file has been automatically uncompressed by safari :-(
tar -xv --strip-components 1 -f ~/Downloads/spark-3.5.1-bin-hadoop3.tar
export PATH=$PATH:~/spark-3.5/bin
export PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.8

Test der Installation

cd ~/spark-3.5
cd examples/src/main/python/
spark-submit --master spark://localhost:7077 pi.py
xx/xx/xx xx:xx:xx INFO SparkContext: Running Spark version 3.5.1
xx/xx/xx xx:xx:xx INFO SparkContext: OS info Mac OS X, 14.3.1, x86_64
xx/xx/xx xx:xx:xx INFO SparkContext: Java version 21.0.2
...
xx/xx/xx xx:xx:xx INFO JettyUtils: Start Jetty 0.0.0.0:4040 for SparkUI
xx/xx/xx xx:xx:xx INFO Utils: Successfully started service 'SparkUI' on port 4040.
...
Pi is roughly 3.139520

...

Solange der Job läuft, kann ein WebUI des Spark-Jobs unter http://localhost:4040/ gefunden werden.