Apache Spark hat seine architektonische Grundlage im Resilient Distributed Dataset (RDD), einem schreibgeschützten Multiset von Datenelementen, das über einen Cluster von Computern verteilt ist und fehlertolerant verwaltet wird. Die Dataframe-API wurde als Abstraktion über der RDD veröffentlicht, gefolgt von der Dataset-API. In Spark 1.x, die RDD war die primäre Application Programming Interface (API), aber ab Spark 2.x Die Verwendung der Dataset-API wird empfohlen, obwohl die RDD-API nicht veraltet ist. Die RDD-Technologie unterliegt weiterhin der Dataset-API.,
Spark und seine RDDs wurden 2012 als Reaktion auf Einschränkungen im MapReduce Cluster Computing-Paradigma entwickelt, das eine bestimmte lineare Datenflussstruktur für verteilte Programme erzwingt: MapReduce-Programme lesen Eingabedaten von der Festplatte, ordnen eine Funktion den Daten zu, reduzieren die Ergebnisse der Karte und speichern Reduktionsergebnisse auf der Festplatte. Die RDDs von Spark fungieren als Arbeitssatz für verteilte Programme, der eine (absichtlich) eingeschränkte Form des verteilten gemeinsamen Speichers bietet.,
Spark erleichtert die Implementierung sowohl iterativer Algorithmen, die ihren Datensatz mehrmals in einer Schleife aufrufen, als auch der interaktiven/explorativen Datenanalyse, d. H. Der wiederholten Abfrage von Daten im Datenbankstil. Die Latenz solcher Anwendungen kann im Vergleich zur Implementierung von Apache Hadoop MapReduce um mehrere Größenordnungen reduziert werden.Zu der Klasse der iterativen Algorithmen gehören die Trainingsalgorithmen für maschinelle Lernsysteme, die den ersten Impuls für die Entwicklung von Apache Spark bildeten.
Apache Spark benötigt einen Clustermanager und ein verteiltes Speichersystem., Für die Clusterverwaltung unterstützt Spark eigenständige (native) Cluster, bei denen Sie einen Cluster entweder manuell starten oder die vom Installationspaket bereitgestellten Startskripte verwenden können. Es ist auch möglich, diese Daemons zum Testen auf einem einzelnen Computer auszuführen), Hadoop YARN, Apache Mesos oder Kubernetes. Für die verteilte storage -, Spark-can-interface mit einer großen Vielfalt, einschließlich der Alluxio, Hadoop Distributed File System (HDFS), MapR-Dateisystem (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, Lustre file system oder eine benutzerdefinierte Lösung implementiert werden kann., Spark unterstützt auch einen pseudoverteilten lokalen Modus, der normalerweise nur für Entwicklungs-oder Testzwecke verwendet wird, bei denen kein verteilter Speicher erforderlich ist und stattdessen das lokale Dateisystem verwendet werden kann; In einem solchen Szenario wird Spark auf einem einzelnen Computer mit einem Executor pro CPU-Kern ausgeführt.
Spark CoreEdit
Spark Core ist die Grundlage des gesamten Projekts. Es bietet verteilte Task Dispatching, Scheduling und grundlegende E / A-Funktionalitäten, die über eine Anwendungsprogrammierschnittstelle (für Java, Python, Scala, .,NET und R) zentriert auf die RDD-Abstraktion (die Java-API ist für andere JVM-Sprachen verfügbar, kann aber auch für einige andere Nicht-JVM-Sprachen verwendet werden, die eine Verbindung zur JVM herstellen können, z. B. Julia). Diese Schnittstelle spiegelt ein funktionales/höheres Programmiermodell wider: Ein „Treiber“ – Programm ruft parallele Operationen wie Map, Filter oder Reduce auf einer RDD auf, indem eine Funktion an Spark übergeben wird, die dann die Ausführung der Funktion parallel auf dem Cluster plant. Diese Operationen und zusätzliche Operationen wie Joins nehmen RDDs als Eingabe und erzeugen neue RDDs., RDDs sind unveränderlich und ihre Operationen sind faul; Fehlertoleranz wird erreicht, indem die „Linie“ jeder RDD (die Reihenfolge der Operationen, die sie erzeugt haben) verfolgt wird, so dass sie bei Datenverlust rekonstruiert werden kann. RDDs können jede Art von Python -,. NET -, Java-oder Scala-Objekten enthalten.
Neben dem RDD-orientierten Funktionsstil der Programmierung bietet Spark zwei eingeschränkte Formen gemeinsamer Variablen: Broadcast-Variablen verweisen auf schreibgeschützte Daten, die auf allen Knoten verfügbar sein müssen, während Akkumulatoren verwendet werden können, um Reduktionen in einem imperativen Stil zu programmieren.,
Ein typisches Beispiel für RDD-zentrierte funktionale Programmierung ist das folgende Scala-Programm, das die Häufigkeit aller Wörter berechnet, die in einer Reihe von Textdateien vorkommen, und die häufigsten druckt. Jede Map, flatMap (eine Variante von map) und reduceByKey verwendet eine anonyme Funktion, die eine einfache Operation für ein einzelnes Datenelement (oder ein Paar von Elementen) ausführt und sein Argument anwendet, um eine RDD in eine neue RDD umzuwandeln.,
Spark SQLEdit
Spark SQL ist eine Komponente auf Spark Core, die eine Datenabstraktion namens DataFrames eingeführt hat, die strukturierte und halbstrukturierte Daten unterstützt. Spark SQL bietet eine domänenspezifische Sprache (DSL) zum Bearbeiten von Datenrahmen in Scala, Java, Python oder .NET. Es bietet auch SQL-Sprachunterstützung mit Befehlszeilenschnittstellen und ODBC/JDBC-Server. Obwohl DataFrames die von RDDs gewährte Typprüfung zur Kompilierungszeit nicht bieten, wird das stark typisierte DataSet ab Spark 2.0 auch von Spark SQL vollständig unterstützt.,
Spark StreamingEdit
Spark Streaming verwendet die schnelle Planungsfunktion von Spark Core, um Streaming-Analysen durchzuführen. Es nimmt Daten in Mini-Batches auf und führt RDD-Transformationen für diese Mini-Batches von Daten durch. Mit diesem Design kann derselbe Satz von Anwendungscode, der für Batch Analytics geschrieben wurde, in Streaming Analytics verwendet werden, wodurch eine einfache Implementierung der Lambda-Architektur erleichtert wird. Diese Bequemlichkeit kommt jedoch mit der Strafe der Latenz gleich der Mini-Batch-Dauer., Andere Streaming – Daten-Engines, die Ereignis für Ereignis und nicht in Mini-Batches verarbeiten, umfassen Storm und die Streaming-Komponente von Flink. Spark Streaming unterstützt die Verwendung von Kafka -, Flume -, Twitter -, ZeroMQ -, Kinesis-und TCP/IP-Sockets.
In Spark 2.x, eine separate Technologie, die auf Datensätzen basiert und als strukturiertes Streaming bezeichnet wird und über eine übergeordnete Schnittstelle verfügt, wird ebenfalls bereitgestellt, um das Streaming zu unterstützen.
Spark kann sowohl in einem herkömmlichen lokalen Rechenzentrum als auch in der Cloud bereitgestellt werden.,
MLlib Machine Learning LibraryEdit
Spark MLlib ist ein verteiltes maschinelles Lernframework auf Spark Core, das zum großen Teil auf die verteilte speicherbasierte Spark-Architektur zurückzuführen ist und bis zu neunmal so schnell ist wie die plattenbasierte Implementierung, die von Apache Mahout verwendet wird (gemäß Benchmarks der MLlib-Entwickler gegen die Implementierungen alternierenden kleinsten Quadrate (ALS) und bevor Mahout selbst eine Spark-Schnittstelle erhielt) und besser skaliert als Vowpal Wabbit.,, Gradientenverstärkter Baum
GraphXEdit
GraphX ist ein verteiltes Graph-Processing-Framework auf Apache Spark., Da es auf RDDs basiert, die unveränderlich sind, sind Diagramme unveränderlich und daher ist GraphX nicht für Diagramme geeignet, die aktualisiert werden müssen, geschweige denn auf transaktionale Weise wie eine Diagrammdatenbank. GraphX bietet zwei separate APIs für die Implementierung massiv paralleler Algorithmen (z. B. PageRank): eine Pre-Abstraktion und eine allgemeinere API im MapReduce-Stil. Im Gegensatz zu seinem Vorgänger Bagel, der in Spark 1.6 formal veraltet war, bietet GraphX volle Unterstützung für Eigenschaftsdiagramme (Diagramme, in denen Eigenschaften an Kanten und Scheitelpunkte angehängt werden können).,
GraphX kann als die Spark-In-Memory-Version von Apache Graphph angesehen werden, bei der Hadoop Disk-basiertes MapReduce verwendet wurde.
Wie Apache Spark begann GraphX zunächst als Forschungsprojekt an AMPLab und Databricks der UC Berkeley und wurde später an die Apache Software Foundation und das Spark Project gespendet.
Leave a Reply