Blog

Apache Spark

Jan Toebes

Aktualisiert Oktober 22, 2025
5 Minuten
Spark ist das neue Kind auf dem Block, wenn es um Big Data-Verarbeitung geht. Hadoop ist ebenfalls ein Open-Source-Cluster-Computing-Framework, aber im Vergleich zum Beitrag der Community ist Spark viel populärer. Wie kommt das? Was ist so besonders und innovativ an Spark? Liegt es daran, dass Spark die Verarbeitung von Big Data einfach und für den Entwickler viel zugänglicher macht? Oder liegt es daran, dass die Leistung hervorragend ist, insbesondere im Vergleich zu Hadoop? Dieser Artikel gibt eine Einführung in die Vorteile der aktuellen Systeme und vergleicht diese beiden Big-Data-Systeme eingehend, um die Leistungsfähigkeit von Spark zu erläutern.

Paralleles Rechnen

Zunächst müssen wir die Unterschiede zwischen Hadoop und dem herkömmlichen Ansatz des parallelen Rechnens verstehen, bevor wir die Unterschiede zwischen Hadoop und Spark vergleichen können. [caption id="" align="aligncenter" width="638"]Verteiltes Rechnen[/caption] Beim parallelen Rechnen haben alle Aufgaben Zugriff auf gemeinsame Daten, um Informationen auszutauschen und ihre Berechnungen durchzuführen. Beim verteilten Rechnen hat jede Aufgabe ihre eigenen Daten. Der Informationsaustausch erfolgt durch die Weitergabe von Daten zwischen den Aufgaben. Eines der wichtigsten Konzepte des verteilten Rechnens ist die Datenlokalität, die den Netzwerkverkehr reduziert. Aufgrund der Datenlokalität werden die Daten schneller und effizienter verarbeitet. Es gibt kein separates Speichernetzwerk oder Verarbeitungsnetzwerk. Apache Hadoop bietet ein Ökosystem für verteiltes Rechnen. Einer der größten Vorteile dieses Ansatzes ist, dass er leicht skalierbar ist und man einen Cluster mit handelsüblicher Hardware aufbauen kann. Hadoop ist so konzipiert, dass es mit Ausfällen der Serverhardware umgehen kann.

Stapel

Um die Hauptunterschiede zwischen Spark und Hadoop zu verstehen, müssen wir uns ihre Stacks ansehen. Beide Stacks bestehen aus mehreren Schichten. [caption id="" align="aligncenter" width="522"]Stacks von Spark und Hadoop[/caption] Die Speicherebene ist für ein verteiltes Dateisystem verantwortlich, das Daten auf handelsüblichen Rechnern speichert und eine sehr hohe Gesamtbandbreite im gesamten Cluster bietet. Spark verwendet die Hadoop-Schicht. Das bedeutet, dass man HDFS (das Dateisystem von Hadoop) oder andere von der Hadoop-API unterstützte Speichersysteme verwenden kann. Die folgenden Speichersysteme werden von Hadoop unterstützt: Ihr lokales Dateisystem, Amazon S3, Cassandra, Hive und HBase. Die Computing-Schicht ist das Programmiermodell für die Verarbeitung großer Datenmengen. Hadoop und Spark unterscheiden sich in diesem Bereich erheblich. Hadoop verwendet eine plattenbasierte Lösung, die durch ein Map/Rece-Modell bereitgestellt wird. Bei einer festplattenbasierten Lösung werden die temporären Daten auf der Festplatte gespeichert. Spark verwendet eine speicherbasierte Lösung mit seinem Spark Core. Daher ist Spark viel schneller. Die Unterschiede in ihren Berechnungsmodellen werden im nächsten Kapitel erörtert. Die Cluster-Manager unterscheiden sich ein wenig von den anderen Komponenten. Sie sind für die Verwaltung der Rechenressourcen und deren Nutzung für die Planung der Anwendungen der Benutzer zuständig. Hadoop verwendet seinen eigenen Clustermanager (YARN). Spark kann über eine Vielzahl von Cluster-Managern laufen, darunter YARN, Apache Mesos und ein einfacher Cluster-Manager namens Standalone Scheduler. Ein einzigartiges Konzept von Spark sind die High-Level-Pakete. Sie bieten viele Funktionalitäten, die in Hadoop nicht verfügbar sind. Man kann diese Ebene auch als eine Art Abstraktionsebene sehen, durch die Code viel einfacher zu verstehen und zu erstellen ist. Diese Pakete sind
  • Spark SQL ist das Paket von Spark für die Arbeit mit strukturierten Daten. Es ermöglicht die Abfrage von Daten über SQL.
  • Spark Streaming ermöglicht die Verarbeitung von Live-Datenströmen, z. B. von Protokolldateien oder einem Twitter-Feed.
  • MLlib ist ein Paket für Funktionen des maschinellen Lernens. Ein praktisches Beispiel für maschinelles Lernen ist die Spam-Filterung.
  • GraphX ist eine Bibliothek, die eine API für die Manipulation von Graphen (z.B. sozialen Netzwerken) und die Durchführung von graphparallelen Berechnungen bietet.
Der Spark-Kern ist ebenfalls in Scala geschrieben und unterstützt Scala nativ, eine Sprache, die für die Implementierung der von ihr unterstützten Arten von Transformationen viel besser geeignet ist als Java. Dies führt zu weniger Code und ist daher intuitiver. [caption id="" align="aligncenter" width="413"]Bildschirmfoto 2015-01-24 um 16.41.37 (Quelle: infoq)[/caption]

Berechnungsmodell

Der Hauptunterschied zwischen Hadoop und Spark ist das Berechnungsmodell. Ein Berechnungsmodell ist der Algorithmus und die Menge der zulässigen Operationen zur Verarbeitung der Daten. Hadoop verwendet das Map/Rece-Verfahren. Ein map/reduce umfasst mehrere Schritte. [caption id="" align="aligncenter" width="596"]Hadoop Berechnungsmodell: Map/Reduce[/caption]
  • Diese Daten werden verarbeitet und auf einer Schlüssel/Wert-Basis indiziert. Diese Verarbeitung wird von der Map-Aufgabe übernommen.
  • Dann werden die Daten auf der Grundlage der Schlüssel zwischen den Knoten gemischt und sortiert. So dass jeder Knoten alle Werte für einen bestimmten Schlüssel enthält.
  • Die Reduzierungsaufgabe führt Berechnungen für alle Werte der Schlüssel durch (z.B. Zählen der Gesamtwerte eines Schlüssels) und schreibt diese auf die Festplatte.
Mit dem Hadoop-Rechenmodell stehen nur zwei Funktionen zur Verfügung: map und reduce. Beachten Sie, dass verteiltes Rechnen mit Hadoop in den meisten Fällen zu mehreren Iterationen von map/reduce führt. Bei jeder Iteration werden alle Daten auf der Festplatte gespeichert. Das ist der Grund, warum es als plattenbasiertes Computing bezeichnet wird.Spark verwendet RDD, auch Resilient Distributed Datasets genannt. Die Arbeit und Verarbeitung von Daten mit RDD ist viel einfacher: [caption id="" align="aligncenter" width="440"]Spark-Berechnungsmodell: RDD[/caption]
  • Lesen von Eingabedaten und dadurch Erstellen eines RDD.
  • Umwandlung von Daten in neue RDDs (bei jeder Iteration und im Speicher). Jede Umwandlung von Daten führt zu einem neuen RDD. Für die Transformation von RDDs gibt es viele Funktionen, die Sie verwenden können, wie map, flatMap, filter, distinct, sample, union, intersection, subtract, usw. Bei map/reduce steht Ihnen nur die map-Funktion zur Verfügung. (..)
  • Aufrufen von Operationen zum Berechnen eines Ergebnisses (Ausgabedaten). Auch hier stehen viele Aktionen zur Verfügung, wie z.B. collect, count, take, top, reduce, fold, usw., anstatt nur reduce mit map/reduce.
[caption id="" align="alignright" width="250"] Leistung Hadoop vs. Spark[/caption] Hinter den Kulissen leistet Spark eine Menge, z.B. die Verteilung der Daten über Ihren Cluster und die Parallelisierung der Operationen. Beachten Sie, dass es sich bei der verteilten Datenverarbeitung um eine speicherbasierte Datenverarbeitung handelt. Die Daten zwischen den Transformationen werden nicht auf der Festplatte gespeichert. Deshalb ist Spark auch so viel schneller.

Fazit

Alles in allem ist Spark der nächste Schritt auf dem Gebiet der Big Data-Verarbeitung und hat gegenüber Hadoop mehrere Vorteile. Die Innovation von Spark liegt in seinem Berechnungsmodell. Die größten Vorteile von Spark gegenüber Hadoop sind
  • Seine In-Memory-Computing-Funktionen, die Geschwindigkeit liefern
  • Pakete wie Streaming und maschinelles Lernen
  • Einfache Entwicklung - man kann nativ in Scala programmieren

Verfasst von

Jan Toebes

Contact

Let’s discuss how we can support your journey.