8 min read

Datenfluss vs. Spark: 4 wichtige Unterschiede zu beachten

Published on
January 22, 2020
Author
Nóra Ambróz
Nóra Ambróz
Senior Data Engineer
Subscribe to our newsletter
Subscribe
Datenfluss vs. Spark: 4 wichtige Unterschiede zu beachten

Sowohl Google Cloud Datenfluss als auch Apache Spark sind Big-Data-Tools, die große Datenmengen in Echtzeit verarbeiten können. Sie verfügen im Kern über ähnliche, auf gerichteten azyklischen Graphen (DAG) basierende Systeme, die Aufträge parallel ausführen. Während Spark jedoch ein Cluster-Computing-Framework ist, das auf Schnelligkeit und Fehlertoleranz ausgelegt ist, ist Datenfluss In vielen Fällen sind beide Alternativen brauchbar, aber jede hat ihre klar definierten Stärken und Schwächen.

Lassen Sie uns einen Vergleich zwischen Datenfluss und Spark anstellen, um die Unterschiede in den Modellen, der Ressourcenverwaltung, den Analyse-Werkzeugen und den Streaming-Funktionen zu sehen.

Dataflow vs. Spark Programmiermodelle

Die Wurzeln von Spark gehen auf das MapReduce-Modell zurück, das eine massive Skalierbarkeit in seinen Clustern ermöglichte. Die Engine verarbeitet verschiedene Datenquellen wie Hive, Avro, Parquet, ORC, JSON oder JDBC. Ihr zentrales Konzept ist das Resilient Distributed Dataset (RDD), ein nur lesbares Multiset von Elementen. RDDs können auf die Knoten eines Clusters aufgeteilt werden, während Operationen parallel auf ihnen laufen können.

Eine weitere Möglichkeit besteht darin, aus der Eingabe eine verteilte Sammlung, einen DataFrame, zu erstellen, der in beschriftete Spalten strukturiert ist. DataFrames ähneln in Beziehung stehenden Datenbanktabellen - so sehr, dass Sie sogar Spark SQL-Abfragen auf ihnen ausführen können. Alternativ können Sie eine Erweiterung der DataFrame-API verwenden, mit der Datasets eingeführt werden, die Typensicherheit für objektorientierte Programmierung bieten. Die Spark-API ist für R, Python, Java und Scala verfügbar.

In Bezug auf die API und die Engine ist Google Cloud Datenfluss nahezu analog zu Apache Spark. Das Modell von Datenfluss ist Apache beam, dass eine einheitliche Lösung für Datenströme und Stapelverarbeitung bietet. Beam basiert auf Pipelines, die Sie mit den SDKs für Python, Java oder Go definieren können. Anschließend fügt Datenfluss die Java- und Python-kompatible, verteilte Verarbeitungs-Backend-Umgebung zur Ausführung der Pipeline hinzu. Dank der Laufzeitunabhängigkeit von Beam ist es auch möglich, auf eine Apache Apex-, Flink- oder Spark Ausführungsumgebung umzusteigen.

Eine Pipeline kapselt jeden Schritt eines Datenverarbeitungsauftrags von der Aufnahme über die Transformation bis hin zur Freigabe der Ausgabe. Die Pipeline-Operationen, die PTransformationen, verarbeiten verteilte Datensätze, die PCollections genannt werden. Das SDK bietet diese Abstraktionen auf einheitliche Weise für gebundene (Stapelverarbeitung) und ungebundene (Streaming) Daten.

Streaming-Funktionen

Wenn eine Analyse-Engine Daten in Echtzeit verarbeiten kann, sind die Ergebnisse für die Benutzer schneller verfügbar. Anders als bei periodisch verarbeiteten Stapeln muss nicht gewartet werden, bis die gesamte Aufgabe abgeschlossen ist. Die schnelle und interaktive Gewinnung von Erkenntnissen kann in vielen Bereichen den Unterschied ausmachen.

Wenn man Spark und Datenfluss im Streaming gegenüberstellt, sind sie fast gleichwertig. Für Apache Spark brachte die Veröffentlichung der Version 2.4.4 Spark Streaming für Java, Scala und Python mit sich. Diese Erweiterung des Spark Kernsystems ermöglicht es, die gleiche sprachintegrierte API für Streams und Batches zu verwenden. Datenfluss mit Apache Beam verfügt außerdem über eine einheitliche Schnittstelle zur Wiederverwendung desselben Codes für Batch- und Stream-Daten. Neben der Einfachheit ermöglicht dies die Ausführung von Ad-hoc-Batch-Abfragen gegen Ihre Streams oder die Wiederverwendung von Echtzeit-Analysen auf historischen Daten.

Die Streaming-Engine von Datenfluss bietet außerdem die Möglichkeit, Live-Streams im laufenden Betrieb zu aktualisieren, ohne dass eine erneute Bereitstellung erforderlich ist. Da die Umgebung selbst sehr zuverlässig ist, können Ausfallzeiten auf ein Minimum reduziert werden.

Verarbeitung von Datenströmen

Die Verarbeitung von Datenströmen erfolgt in der Regel in Fenstern, was bedeutet, dass die unbegrenzten Daten in begrenzte Sammlungen gruppiert werden. Eine der beliebtesten Fenster-Strategien besteht darin, die Elemente nach dem Zeitstempel ihrer Ankunft zu gruppieren. Die Streaming-API von Spark verwendet den diskreditierten Stream (DStream), um in regelmäßigen Abständen neue RDDs zu generieren und eine kontinuierliche Sequenz von ihnen zu formulieren. Der DStream akzeptiert eine Funktion, die verwendet wird, um ein RDD nach einem festen Zeitintervall zu erzeugen.

Neben der Ankunftszeit erlaubt Datenfluss eine echte Ereigniszeit-basierte Verarbeitung für jede seiner Fenster-Strategien. Taumelnde (oder für Beam feste) Fenster verwenden nicht überlappende Zeitintervalle. Sprungfenster (sliding windows) können sich überlappen; sie können z. B. alle zehn Sekunden die Daten der letzten fünf Minuten erfassen. Sitzungsfenster verwenden Lückenzeit und Schlüssel. Wenn die Zeit zwischen zwei Ankünften mit einem bestimmten Schlüssel größer ist als die Lücke, beginnt ein neues Fenster. Und als ob das noch nicht genug wäre, gibt es auch die Möglichkeit, benutzerdefinierte Fenster zu erstellen. Zur weiteren Kontrolle kann ein Wasserzeichen anzeigen, wann Sie erwarten, dass alle Daten eingetroffen sind. In Kombination mit Auslösern können Sie festlegen, wann die Ergebnisse ausgegeben werden sollen.

Analysetools

Für Analysewerkzeuge bietet Spark SQL-Abfragen, Echtzeit-Stream- und Grafikanalysen sowie maschinelles Lernen an. Spark SQL arbeitet mit der DataFrame-API zusammen. DataFrames haben benannte Spalten wie eine relevante Datenbank, so dass Analysten dynamische Abfragen mit der bekannten SQL-Syntax ausführen können. Das System verfügt über integrierte Optimierungsfunktionen, spaltenbasierte Speicherung, Caching und Codegenerierung, um die Abläufe schneller und kostengünstiger zu machen. Die Spark Core-Engine bietet eine In-Memory-Analyse für rohe, gestreamte, unstrukturierte Eingabedaten über die Streaming-API. GraphX erweitert die Kernfunktionen um eine visuelle Grafikanalyse zur Überprüfung Ihrer RDDs und Operationen. MLlib schließlich ist eine Bibliothek für maschinelles Lernen mit einsatzbereiten Klassifizierungs-, Clustering- und Regressions-Algorithmen.

Datenfluss ist tief in die anderen Dienste von Google Cloud Plattform integriert und stützt sich auf diese, um Erkenntnisse zu liefern. SQL-Abfragen sind über die BigQuery-Web-UI unter Verwendung der ZetaSQL-Syntax verfügbar. BigQuery ist außerdem ein vollständig verwalteter Dienst, sodass keine Hardwarezuweisung erforderlich ist. Erstellen Sie einen gemeinsamen Stream aus einem Snapshot-BQ-Datensatz und einem Pub/Sub-Abonnement und schreiben Sie dann in BQ für das Dash Boarding. Andere Dienste ermöglichen maschinelles Lernen wie AutoML Tables oder Google AI Plattform.

Resourcenmanagement

Auch wenn sich ihre Modelle ähneln, weisen Spark und Datenfluss große Unterschiede in der Ressourcenverwaltung auf. Bei Apache Spark besteht der erste Schritt in der Regel darin, ein MapReduce-Cluster mit Knoten einzurichten und dann einen Auftrag zu übermitteln. Danach folgt die manuelle Feinabstimmung der Ressourcen zum Auf- und Abbau von Clustern. Zu diesem Zweck bietet Spark einen steckbaren Bündel Manager. Zur Auswahl stehen Kubernetes, Hadoop YARN, Mesos oder die integrierte Spark Standalone-Option. Jeder Manager arbeitet mit Master- und Slave-Knoten, während sie auch Lösungen für Sicherheit, Hochverfügbarkeit, Planung und Überwachung bieten. Spark verfügt über die Möglichkeit, Cluster-Ressourcen zwischen laufenden Aufträgen zu teilen und Ressourcen mit einfachen Bereitstellungsskripten neu zuzuweisen.

Datenfluss hingegen ist ein vollständig verwalteter Dienst unter der Google Cloud Plattform (GCP). Der integrierte Lastausgleicher arbeitet mit horizontaler automatischer Skalierung, um der Umgebung je nach Bedarf Arbeiter hinzuzufügen oder zu entfernen. Das automatisierte, dynamische Management hebt die Notwendigkeit von Dev-Ops auf und minimiert den Bedarf an Optimierung. Zur Kostenkontrolle können Sie unter anderem die minimale und maximale Anzahl der Compute Engine Worker und deren Typ festlegen.

Ob Ihr Projekt die Vorteile eines integrierten Lastausgleicher nutzen möchte oder nicht, können Sie zwischen den beiden Optionen entscheiden.

Dataflow vs. Spark: Unwichtige Faktoren

Im Vergleich zu den Hauptunterschieden zwischen Datenfluss und Spark sind die nächsten Faktoren nicht entscheidend. Dennoch können sie in manchen Fällen den Ausschlag geben, also sollten wir sie nicht vergessen.

  • Integration: Während Datenfluss einfach mit jedem anderen GCP-Service verwendet werden kann, funktioniert Spark besonders gut mit Hadoop YARN, HBase, Cassandra, Hive, Azure (Cosmos DB) und GCP Bigtable.
  • Preisgestaltung: Spark ist Open-Source Gemeinschaft und kann kostenlos genutzt werden, benötigt aber eine Ausführungsumgebung, deren Preis stark variieren kann. Datenfluss rechnet pro Sekunde für jeden Stream/Batch-Worker und die Nutzung von vCpu, Speicher und Storage ab. Streaming Engine, Datenfluss Shuffle und andere GCP-Dienste können die Kosten verändern. Der Einstieg liegt bei nur wenigen Cent.
  • Prominente Nutzer: Spark kann Uber Technologies, Slack, Shopify und 9gag zu seinen Nutzern zählen. Dataflows kann sich rühmen, Spotify, Resultados Digitais, Handshake, The New York Times, Teads, Sky, Unity, Talend, Confluent und Snowplow zu bedienen.

Abschließende Überlegungen:

In diesem Artikel habe ich Datenfluss und Spark auf der Grundlage ihres Programmiermodells, ihrer Streaming-Funktionen, ihrer Analysewerkzeuge und ihres Ressourcen-Managements verglichen.

Bei Apache Spark gingen wir auf einige Funktionen der Core-Engine ein, darunter RDDs, und befassten uns dann mit DataFrames, Datasets, Spark SQL und der Streaming-API. Außerdem gab es einen Überblick über Apachen beam, das Datenverarbeitungsmodell hinter Datenfluss.

Es stellte sich heraus, dass beide Tools über Optionen verfügen, um einfach zwischen Batches und Streams zu wechseln. Spark bot grundlegende Möglichkeiten zum Gruppieren und Sammeln von Stream-Daten in RDDs. Beam hingegen bot umfassendere Fenstermöglichkeiten mit Watermarks und Auslösern.

Zu den wichtigsten Analyse-Werkzeugen von Spark gehörten Spark SQL-Abfragen, GraphX und MLlib. Im gleichen Bereich hatte Datenfluss die anderen GCP-Dienste wie BigQuery und AutoML Tables.

Der größte Unterschied lag in der Ressourcenverwaltung. Die Bereitstellung und Verwaltung eines Spark-Clusters erforderten einen gewissen Aufwand auf Seiten der Entwickler und Betreiber. Im Gegensatz dazu ist Datenfluss ein vollständig verwalteter No-ops-Service mit einem automatisierten Lastausgleicher und einer Kostenkontrolle.

Der Vergleich hat gezeigt, dass Google Cloud Datenfluss und Apache Spark in der Regel gute Alternativen füreinander sind, aber aufgrund ihrer Unterschiede ist es jetzt hoffentlich einfacher, die passende Lösung für Ihr Projekt zu finden.

Author
Nóra Ambróz
Senior Data Engineer
Subscribe to our newsletter
Subscribe