Apache Spark 2.0: Zweiter Akt einer Erfolgsgeschichte

Apache Spark hat sich inzwischen als einheitliche Analyseplattform für Big Data und Ersatz für MapReduce etabliert. Version 2.0 bringt eine neue Streaming-Engine, Erweiterungen der API sowie Verbesserungen bei der Performance und beim Speichermanagement.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Apache Spark 2.0: Zweiter Akt einer Erfolgsgeschichte
Lesezeit: 21 Min.
Von
  • Matthias Niehoff
  • Daniel Pape
Inhaltsverzeichnis

Apache Spark ermöglicht die Verarbeitung von Batch- und Streaming-Daten sowie die Anbindung an unterschiedliche Quellen. Zusätzlich bietet es Funktionen zur weiteren Datenverarbeitung mit umfangreichen Bibliotheken im Bereich maschinelles Lernen. Das neue Major-Release wartet mit zahlreichen Neuerungen auf, von denen die Dataset-API und das Structured Streaming besonders hervorstechen.

Auf der MesosCon 2016 beschrieb der Mitschöpfer des Frameworks Matei Zaharia in einer Keynote die zwei Ziele beim Design von Spark rückblickend als das Bereitstellen einer vereinheitlichten Engine zum Verarbeiten großer Datenmengen samt einer prägnanten High-Level-API zum Arbeiten auf solchen Mengen. Neben der Engine für das Ausführen von verteilten Anwendungen, die als Ersatz für Hadoops MapReduce-Engine fungiert, bietet Spark eine am funktionalen Programmiermodell ausgerichtete API, deren Kernabstraktion ein Resilient Distributed Dataset (RDD) ist. Hierbei handelt es sich im Grunde um eine bedarfsausgewerte (lazy) Java/Scala-Collection, für die Spark intern einen Graphen speichert, der den Konstruktionsplan der RDD wiedergibt und bei Datenverlust die benötigte Rekonstruktion erlaubt und somit eine Fehlertoleranz bietet .

Außer einer einfach zu nutzenden Programmierschnittstelle und guter Performance kann Spark zudem durch Stream-Verarbeitung in Form von Mini-Batches, durch die Unterstützung unterschiedlicher Datenquellformate sowie durch umfangreiche Bibliotheken überzeugen. Dank der Anbindung über die Programmiersprachen Scala, Java, Python und R sowie einer interaktiven REPL (Read-eval-print Loop) schaffte es Spark, verschiedene Nutzerkreise zu adressieren.

Spark ist heute eine feste Größe im Bereich Big Data beziehungsweise Data Science. Grund genug, einen Blick auf die wichtigsten Neuerungen der 2.0-Version zu werfen.

Mit dem neuen Release ist die SparkSession der Einstiegspunkt für jede Spark-Anwendung. Sie vereint die aus den bisherigen Versionen bekannten SQLContext und HiveContext, die sie ablöst. Da sie ebenfalls für die neue, strukturierte Streaming API zum Einsatz kommt, stellt sie einen einheitlichen Startpunkt für jegliche Art von Spark-Applikationen dar.

Entwickler können eine SparkSession über einen Builder erzeugen. Neben dem Master können sie über config weitere Parameter an die Session übergeben. Der Befehl getOrCreate generiert die SparkSession oder aktualisiert eine vorhandene mit den neuen Parametern. Schon vorhanden ist eine Session beispielsweise in der Spark-Shell oder in Notebooks wie Zeppelin. Folgender Quelltextauszug zeigt das Anlegen einer neuen, parametrisierten SparkSession:

val spark = SparkSession
.builder
.master("local[*]")
.appName("SomeWordCount")
.config("spark.sql.shuffle.partitions", 100)
.getOrCreate()

Über die SparkSession ist das Lesen von Dateien und Streams als DataFrames, Datasets und Datastream möglich. Wer weiterhin mit RDDs arbeiten möchte, kann trotzdem die SparkSession nutzen und mit spark.sparkContext auf den darunterliegenden SparkContext zugreifen. Alternativ lässt sich Letzterer weiterhin manuell erstellen.