Definition: RDD

Als Resilient Distributed Dataset (kurz RDD) bezeichnen wir die grundlegende Datenstruktur in Apache Spark, die es ermöglicht, große Datenmengen effizient und fehlertolerant über mehrere Knoten eines Clusters hinweg zu verarbeiten.

Namensgebend für RDDs sind:

  • Resilience: Auch in Fehlersituationen gehen keine Daten verloren
  • Distribution: Die Daten werden über das Cluster verteilt.

Diese namensgebenden Eigenschaften werden umgesetzt durch die folgenden Konzepte:

  • Partitionierung
  • Unveränderbarkeit
  • In-Memory-Verarbeitung
  • Lazy Execution
  • Lineage

Aspekte

Definition: Partitionierung von RDDs

Die Elemente eines RDDs werden über die Nodes des Clusters hinweg partitioniert, wobei die genaue Anzahl der Partitionen auch konfigurierbar ist.

Jede Partition korrespondiert mit einem Analyse-Task.

Definition: Immutability von RDDs

RDDs sind unveränderlich (en. immutable), was bedeutet, dass jede Operation auf einem RDD zu einer neuen Kopie des RDD führt.

Definition: In-Memory Verarbeitung von RDDs

Anders als in Hadoop werden die Daten in Spark erst nach Abschluss der Map-Schritte persistiert.

Die Datenverarbeitung wird also vollständig in-memory durchgeführt.

Definition: Lazy-Evaluation von RDDs

Spark definiert einzelne Tasks, bspw. Transformationsschritte.

Diese Tasks erzeugen logisch zwar stets ein neues RDD, werden jedoch nicht sofort ausgeführt, sondern zunächst in einem Lineage-Graphen aufgezeichnet.

Die eigentliche Ausführung und Berechnung erfolgt erst dann, wenn eine bestimmte “Trigger-Action” aufgerufen wird.

Dadurch kann Spark die Ausführung der Schritte optimieren:

  • Schritte können zusammengefasst werden,
  • Überflüssige Schritte können entfernt werden,

Definition: Lineage-Graph von RDDs

Die ausgewählten Tasks werden in einem Lineage-Graphen gesammelt.

So ist stets für jedes RDD klar, auf welchen Daten es basierte, und wie es in einem Fehlerfall erneut berechnet werden kann.