Apache Spark ist ein In-Memory-Cluster-Computing-Framework, das 2009 am UC-Berkeley-AMPLab von Matei Zaharia als Forschungsprojekt begann und 2013 Apache-Top-Level-Projekt wurde. Spark verarbeitet Daten über RDDs (Resilient Distributed Datasets) und die höherwertigen DataFrame/Dataset-APIs; zugehörige Module sind Spark SQL, MLlib, GraphX und Structured Streaming. Die Firma Databricks wurde 2013 von den Berkeley-Gründern ins Leben gerufen.

Jobs einreichen

spark-submit --master yarn --deploy-mode cluster --executor-memory 4g --num-executors 10 app.py
spark-submit --master local[*] --class org.example.Main --jars helper.jar app.jar
spark-submit --master k8s://https://cluster:6443 --conf spark.kubernetes.container.image=spark:3.5 app.py

--master wählt den Cluster-Manager (local[*], yarn, k8s://, Standalone); --executor-memory und --num-executors steuern die Ressourcen. Für Python-Anwendungen übergibt man eine .py-Datei, für Scala/Java ein JAR mit --class.

Interaktive Shells und SQL

pyspark --master local[2]
spark-shell --master local[2]
spark-sql -e "SELECT count(*) FROM t" -f abfrage.sql
spark-sql -i init.sql

pyspark ist die Python-REPL, spark-shell die Scala-REPL, spark-sql führt Hive-kompatible SQL-Abfragen aus (-e für Inline, -f für Dateien). In pyspark arbeitet man typischerweise mit einer SparkSession:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("demo").getOrCreate()
df = spark.read.csv("daten.csv", header=True)
df.filter(df.alter > 30).groupBy("stadt").count().show()
df.cache()

df.cache() bzw. persist(StorageLevel.MEMORY_AND_DISK) hält Zwischenergebnisse im Speicher; die Web-UI läuft standardmäßig auf localhost:4040.

Spark ist die häufigste Ausführungs-Engine hinter Hive und konsumiert mit Structured Streaming direkt aus Kafka. Die APIs gibt es nativ für Scala, Java und Python; Abfragen formuliert man in SQL.