Wenn es darum geht, massiv viele Daten zu verarbeiten und das möglichst schnell, dann kommen schnell Systeme aus dem Hadoop-Umfeld und vor Allem Apache Spark zum Einsatz. In diesem Artikel erfährst du was der Unterschied zwischen MapReduce und der Spark DataFlow Engine sind, wie Spark grundsätzlich funktioniert und welche Möglichkeiten es mit Hilfe eingebauter Pakete bietet. Und das coole an Spark ist, dass es, wie auch Hadoop, eine freie Software ist. Viel Spaß beim Lesen!
Von Hadoop MapReduce zu Sparks DataFlow Engine
Warum eigentlich nicht mehr Hadoops MapReduce? Das hat mehrere Gründe. Zum einen ist es bei realen Anwendung häufig so, dass mehr als nur ein MapReduce Job gebraucht wird, um eine Aufgabe zulösen. Zum Beispiel soll nach einem Reduce auch wieder ein Mapping durchgeführt werden und die Daten vielleicht nochmal anders gruppiert und nochmals ausgewertet werden. Von Haus aus sieht Hadoop solche Kompositionen allerdings nicht vor. Eine weitere Einschränkung besteht in der schlechten Programmierbarkeit von MapReduce. Es sind eben nur diese beiden Operatoren, zuzüglich der Gruppierung dazwischen, vorgesehen. Für einfache alternative Aufgaben, wie zum Beispiel das Filtern von Einträgen müssen bereits eigene Konstrukte gebaut werden. Letztlich ist auch die Geschwindigkeit bei Hadoops MapReduce durch die starke Verwendung der Festplatten sehr eingeschränkt. In der Standardvariante werden alle Ergebnisse nämlich zunächst auf die Festplatte geschrieben und wenn sie abgerufen werden, dann wieder geladen. Lesezugriffe auf Festplatten benötigen circa 40 mal so viel Zeit wie Lesezugriffe auf den Arbeitsspeicher.
Apache Spark versucht mit der Architektur einer Datenfluss Maschine (engl. Dataflow Engine) diese Probleme zu adressieren. Was gleich bleibt ist die Ausführung von benutzerdefinierten Funktionen auf mehreren Maschinen, also auf einem Cluster. Ein maßgeblicher Unterschied ist, dass sich Spark mehr auf den Arbeitsspeicher als auf die Festplatte stützt. Außerdem soll der Datenfluss im Vordergrund stehen und durch eine große Reihe vordefinierter Operatoren modelliert werden können. Dabei können höhere Programmiersprachen wie Java, Scala oder Python angewendet werden. Bevor ein solcher logischer Datenfluss schließlich ausgeführt wird, wird er noch durch die Engine in einen physikalischen Datenfluss übersetzt und vor Allem auch optimiert.
Sparks Konzept von Dataflows mithilfe von Transformationen und Aktionen
Im Kern des Konzeptes der Dataflow Engine stehen die Resilient Distributed Datasets (im Folgenden: RDD; deutsch: belastbarer, verteilter Datensatz). Ein solches RDD ist im Prinzip eine Verpackung mit einer Anweisung zur Transformation um ein tatsächlichen Datensatz herum. Wichtig hierbei ist, dass diese Transformationen nicht direkt ausgeführt werden. Vielmehr modellieren RDDs den logischen Datenfluss. Zu Sparks Transformationen gehören neben dem Map auch noch Filter, Sample, FlatMap, Union, Join, Foreach und weitere. All diese Grundgerüste werden durch benutzerdefinierte Funktionen in ihrer exakten Funktionsweise bestimmt.
Das Bild rechts beschreibt die grobe Architektur des Datenflusses mit Spark. Wie zusehen ist, lassen sich die RDDs mit ihren Transformationen übereinander stapeln. Das ist wie, wenn das innerste Datenpaket mit mehreren Verpackungen eingepackt ist und auf jeder dieser Verpackung steht eine Transformation. Der zweite Teil der Architektur sind die Aktionen. Zu diesen gehören neben dem Reduce auch noch Aggregate, Count, Collect, First und weitere. Wird eine Aktion auf einem RDD aufgerufen, so wird der ganze Stapel an Transformationen tatsächlich auf den Daten ausgeführt. Bevor das passiert wird der logische Datenfluss noch von Spark optimiert und in einen physikalischen Datenfluss übersetzt. Letztendlich lassen sich größere Abfragen leichter im Quellcode beschreiben und auch wesentlich schneller ausführen.
Weitere Pakete für Spark
Eine weitere große Unterstützung und Förderung der Programmierbarkeit bilden Sparks zusätzliche Pakete. So kann Spark mit diesen Paketen kombiniert werden, um einen noch wesentlich größeren und Fachspezifischen Pool an Funktionalitäten zu erhalten. So bietet beispielsweise Spark SQL die Möglichkeit SQL Abfragen abzusetzen und mit Dataframes, also strukturierten Daten mit einem Schema zu arbeiten. Die MLlib ermöglicht es standard Operationen des maschinellen Lernens und Data Minings im Kontext von Spark anzuwenden, wie beispielsweise Naive Bayes oder auch K-Means. Als letztes Beispiel bietet GraphX Funktionalitäten für Operationen auf Datengraphen an.
Zwar wird Spark mit zu dem Hadoop Ökosystem gezählt, aber es kann auch als Standalone, also unabhängig von Hadoop benutzt werden. Oft ist aber dennoch das HDFS, das Speichersystem für die Daten die dann mittels Spark prozessiert werden. Aber die Daten können auch von beispielsweise Apache Cassandra, HBase, Amazon S3 oder auch einfach von dem lokalen Dateisystem geladen werden.
Kommentar schreiben