Apache Spark
# Apache Spark

Apache Spark ist ein Framework für Cluster Computing, das im Rahmen eines Forschungsprojekts am AMPLab der University of California in Berkeley entstand und seit 2010 unter einer Open-Source-Lizenz öffentlich verfügbar ist. Seit 2013 wird das Projekt von der Apache Software Foundation weitergeführt und ist dort seit 2014 als Top Level Project eingestuft.

## Architektur

Spark besteht aus mehreren, teilweise voneinander abhängigen Komponenten:

### Spark Core

Der Spark-Core bildet die Grundlage des gesamten Spark-Systems. Er stellt grundlegende Infrastruktur-Funktionalitäten bereit (Aufgabenverteilung, Scheduling, I/O etc.). Die grundlegende Datenstruktur für alle in Spark ausgeführten Operationen wird als Resilient Distributed Dataset (RDD, auf deutsch etwa "robuster verteilter Datensatz") bezeichnet – hierbei handelt es sich um einen nach logischen Kriterien gebildeten (Teil-)Bestand von Daten, der über mehrere Rechner verteilt werden kann. RDDs können aus externen Quellen (z. B. SQL, Datei, …) erzeugt werden oder als Ergebnis aus der Anwendung verschiedener Transformations-Funktionen (map, reduce, filter, join, group, …). Die RDDs und Transformationen können als gerichteter azyklischer Graph (directed acyclic graph, DAG) verstanden werden.

### Spark SQL

Spark SQL bietet die Möglichkeit, RDDs in einen sogenannten Data Frame zu wandeln, auf dem SQL-Anfragen durchgeführt werden können. Dazu werden Data Frames als temporäre Tabellen mit einem benutzerdefinierten Tabellennamen registriert, welcher in der FROM-Klausel von SQL-Anfragen verwendet werden kann. Dies ermöglicht eine einfache Durchführung von Selektionen, Projektionen, Joins, Gruppierungen und mehr.

### Spark Streaming

Spark Streaming ermöglicht die Verarbeitung von Datenströmen, indem diese in einzelne Pakete unterteilt werden, auf welchen dann wiederum Transformationen ausgeführt werden können.

### MLlib/SparkML Machine Learning Library

MLlib und das seine Nachfolge antretende SparkML sind Funktionsbibliotheken, die typische Machine-Learning-Algorithmen für verteilte Spark-Systeme verfügbar machen.

### GraphX

GraphX ist ein auf Spark basierendes, verteiltes Framework für Berechnungen auf Graphen.

