Structured Streaming für Continuous Applications

Apache Spark 2.0: Technical Preview verfügbar

Dominik Mohilo
Apache Spark

© Apache Software Foundation

IBM, Samsung, Nokia, Amazon – das sind nur einige wenige der Organisationen, die das Cluster-Computing-Framework Spark nutzen. Das seit 2014 von der Apache Foundation als Top Level Project eingestufte Framework soll mit dem kommenden Update einfacher, schneller und smarter werden.

In wenigen Wochen ist es soweit: Mit Apache Spark 2.0 soll, zwei Jahre nach dem initialen Release von Spark 1.0, das nächste Major Release veröffentlicht werden. Für Nutzer von Databricks ist nun eine Technical Preview zum Testen verfügbar. Die Entwickler von Sparks geben Entwicklern und Nutzern so die Möglichkeit, die neue Version schon einmal zu testen. Natürlich versprechen sich die Macher von Spark reichlich Feedback zu eventuell noch vorhandenen Fehlern, damit diese bis zum Release Datum behoben werden können.

Für das Update haben sich die Entwickler von Databricks drei Begriffe auf die Fahnen geschrieben: einfacher, schneller, smarter. Reynold Xin, Co-Founder von Databricks, schreibt im Engineering Blog von Databricks, dass Spark 2.0 mit dem Blick auf das Feedback aus den vergangenen zwei Jahren entwickelt wurde.

Java-Magazin-7-16_Cover_595x842-200x283Was ist Apache Spark?

Das AMPLab der University of California in Berkeley veröffentlichte 2010 ein neues Open-Source-Analysewerkzeug. Spark wurde 2013 zum Apache-Projekt und hat seither eine beeindruckende Entwicklung durchgemacht. Im Kern dreht sich bei Spark alles um die so genannten Resilient Distributed Datasets (RDD): verteilte, fehlertolerante, parallelisierbare Datenstrukturen. Diese können in Verbindung mit vielen verschiedenen Modulen genutzt werden, bspw. zur Verarbeitung von Graphen (GraphX), zum Streaming (Kafka, HDFS, Flume, ZeroMQ, Twitter) oder für Machine Learning basierend auf der MLib.

Neben Scala unterstützt Spark mittlerweile auch Python und R als Programmiersprachen. Das erleichtert Data Scientists den Einstieg, die bereits Erfahrung mit einem der beiden gesammelt haben. Wie Sie aus der Liste entnehmen können, ist Spark ein recht verbindungsfreudiges Framework und schafft es so, viele der bereits existierenden Datenquellen unter einem einheitlichen API zu vereinen. Das so entstandene Analyseframework hat sich schnell durchgesetzt.

Sie wollen mehr über Big Data, Fast Data und den Technologie-Stack „SMACK“ erfahren? Dann gönnen Sie sich das aktuelle Java Magazin (7.16)!

Einfacher

Spark ist für die Möglichkeit bekannt, APIs erstellen zu können, die schlicht, intuitiv und ausdrucksstark sind. Im kommenden Update soll dieser Bereich weiter ausgebaut werden. Der Fokus liegt dabei auf dem Standard-SQL-Support sowie der Vereinigung von DataFrames und Dataset API.

Spark 2.0 bringt im Bereich SQL unter anderem einen neuen ANSI SQL-Parser, außerdem werden Subqueries nun unterstützt. Spark ist zudem ab der nächsten Version fähig, alle 99 TPC-DS-Queries auszuführen. Diese erweiterten SQL-Kapazitäten sollen den Portierungsaufwand veralteter Applikationen nach Spark deutlich reduzieren.

Lesen Sie auch: Apache Spark – Mehr als ein Hadoop-Ersatz

Im API-Bereich ist unter anderem neu, dass DataFrame lediglich ein Type-Alias für Dataset of Row ist. Dieses neue Dataset-Interface ist die Abstraktion, die für das Structured Streaming verwendet wird. Für Nutzer des Data Frame-APIs, die bisher nicht sicher waren, welcher „Conext“ zu verwenden ist, SQLContext oder HiveContext, gibt es ebenfalls gute Neuigkeiten: SparkSession ersetzt die beiden und vereint sie in sich als neuer Einstiegspunkt (auch wenn beide weiterhin für die Rückwärtskompatibilität weiter Bestandteil von Spark bleiben).

Weitere neue Features: Machine-Learning-Pipelines können von Nutzern nun in allen von Spark unterstützten Programmiersprachen gespeichert und geladen werden, zudem wurde das Accumulator API deutlich überarbeitet. Letzteres hat nun eine viel simplere Type-Hierarchie.

Schneller

Da die Performance für einen Großteil der Nutzer von Spark ein sehr wichtiger Faktor ist, haben die Entwickler mit der Whole-stage code generation Spark 2.0 ein wichtiges neues Feature mitgegeben. Durch das Ausgeben von optimiertem Bytecode an die Laufzeit, der das gesamte Query in eine einzige Funktion zusammenfasst, werden virtuelle Funktions-Calls eliminiert und die CPU-Register vorteilhaft für das Zwischenspeichern von Daten genutzt.

Die folgende Tabelle zeigt, wie leistungsstark die Whole-stage code generation arbeiten soll:

cost per row (single thread)
primitive Spark 1.6 Spark 2.0
filter 15ns 1.1ns
sum w/o group 14ns 0.9ns
sum w/ group 79ns 10.7ns
hash join 115ns 4.0ns
sort (8-bit entropy) 620ns 5.3ns
sort (64-bit entropy) 620ns 40ns
sort-merge join 750ns 700ns

Bei End-to-End-Queries (in diesem Fall TPC-DS-Queries) ergab der Vergleich zwischen Spark 1.6 und Spark 2.0 laut Databricks das Folgende:

Vergleich des Zeitaufwands bei der Bearbeitung von TPC-DS-Queries / Quelle: Databricks

Vergleich des Zeitaufwands bei der Bearbeitung von TPC-DS-Queries / Quelle: Databricks

Smarter

Anwendungen, die Entscheidungen in Echtzeit treffen, brauchen mehr als eine funktionierende Streaming-Engine. Laut Reynold Xin hat die Vergangenheit gezeigt, dass eine tiefe Integration des Batch Stacks und des Streaming Stacks sowie die Integration mit externen Lagersystemen und die Fähigkeit, mit Änderungen in der Business-Logik klarzukommen, ebenso notwendig sind. So kommt es, dass Unternehmen einen sogenannten Full Stack brauchen, der die Entwicklung von End-to-End „Continuous Applications“ ermöglicht.

End-to-End Continuous Applications / Quelle: Databricks

End-to-End Continuous Applications / Quelle: Databricks

Das mit Spark 2.0 kommende Structured Streaming basiert auf dem Grundsatz, dass der einfachste Weg, Antworten in Datenströmen zu errechnen, darin besteht, nicht über den Fakt diskutieren zu müssen, dass es sich um einen Datenstrom handelt. Das Structured Streaming API wird als Erweiterung des DataFrame/Dataset APIs im kommenden Update enthalten sein. Die wichtigsten Features werden unter anderem der Support für Eventzeit-basiertes Processing, die sogenannte Sessionization und die enge Integration mit nicht-streamenden Datenquellen und –senken sein.

Weitere Informationen zu Apache Spark 2.0 gibt es im Engineering Blog von Databricks und auf der News-Seite von Apache Spark.

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.