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.