Begriff
Apache Spark
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Hadoop war revolutionär, aber langsam (schreibt ständig auf Festplatte). Spark ist der Turbo-Nachfolger. Es macht genau das Gleiche (Big Data verarbeiten), aber es hält die Daten im Arbeitsspeicher (RAM). Dadurch ist es bis zu 100x schneller. Es ist das Schweizer Taschenmesser für Daten: Es kann SQL, es kann Streaming, es kann Machine Learning. Alles in einem Tool.
Merksatz: Eine blitzschnelle Engine für Big-Data-Verarbeitung, die Daten im Arbeitsspeicher (In-Memory) hält und Module für SQL, Streaming und KI bietet.
Mit PySpark (Python) oder Scala. Es fühlt sich an wie Pandas, aber für Terabytes.
df = spark.read.csv("riesige_datei.csv")
df.filter(df['alter'] > 18).count()
Der Code läuft nicht auf deinem Laptop, sondern verteilt auf 1000 Servern.
1. RDD (Resilient Distributed Dataset)
Die ur-alte Datenstruktur von Spark. Eine Liste von Objekten, die auf Cluster verteilt ist. Unveränderlich (Immutable). Wenn ein Server abstürzt, weiß Spark genau, wie es die verlorenen Daten neu berechnen muss (Lineage), ohne ein Backup laden zu müssen.
2. Catalyst Optimizer
Wenn du Spark SQL schreibst (SELECT * FROM ...), optimiert Spark den Plan.
Er schiebt Filter nach vorne ("Predicate Pushdown"), damit weniger Daten geladen werden müssen.
Er ist schlauer als der Programmierer.
1. Das Shuffle-Problem & Data Skew
Der größte Performance-Killer in Spark ist der Shuffle.
Wenn du ein groupBy oder einen Join machst, müssen Daten zwischen den 1.000 Servern übers Netzwerk verschickt werden, damit alle Datensätze mit dem gleichen Key auf dem gleichen physischen Server landen. Das ist extrem teuer.
Ein berüchtigtes Problem ist der Data Skew: Wenn ein Key (z. B. Land = 'USA') viel häufiger vorkommt als andere, kriegt ein einziger Server im Cluster 90% der Last ab, während die anderen 999 Server arbeitslos warten. Erfahrene Dateningenieure lösen das mit "Salting" (Zufallszahlen an den Key hängen), um die Last künstlich zu verteilen.
2. Tungsten Engine & Whole-Stage Code Generation
Spark 2.x und 3.x nutzen die Tungsten Engine.
Anstatt Java-Objekte zu nutzen (die viel RAM-Overhead durch Metadaten haben), verwaltet Spark den Speicher manuell in binären Arrays (Off-Heap).
Noch krasser: Spark nutzt Whole-Stage Code Generation. Der Catalyst-Optimizer nimmt deine SQL-Query und schreibt zur Laufzeit einen optimalen Java-Bytecode-Block, der die gesamte Logik in einer einzigen, engen Schleife ausführt. Das ist fast so schnell wie handoptimierter C++ Code und nutzt die CPU-Pipeline (SIMD) perfekt aus.
3. Structured Streaming & Checkpointing
Für Echtzeit-Daten (Kafka) nutzt Spark Structured Streaming. Das Geniale: Für den Programmierer sieht ein Stream aus wie eine Tabelle, die unendlich lange nach unten wächst. In der Produktion ist Checkpointing das A und O. Spark schreibt den aktuellen Fortschritt (Offsets) regelmäßig auf ein persistentes System (HDFS/S3). Wenn das gesamte Cluster explodiert, startet Spark einfach neu, liest den Checkpoint und macht exakt dort weiter, wo es aufgehört hat (Exactly-Once Guarantees).
Quick-Check
Brauche ich Hadoop dafür?
Jein. Spark nutzt oft HDFS zum Speichern der Daten, aber es kann auch S3 oder Cassandra nutzen. Spark ist nur die Rechen-Engine, nicht der Speicher.Was ist Databricks?
Die Firma der Spark-Erfinder. Sie bieten Spark als Luxus-Cloud-Dienst an.Ist RAM nicht teuer?
Ja. Spark braucht viel RAM. Wenn die Daten nicht reinpassen, lagert es auf Festplatte aus (Spill to Disk) und wird langsam. Tuning ist eine Kunst.