Was ist Apache Spark? Die Big-Data-Plattform, die Hadoop

Apache Spark definiert

Apache Spark ist ein Datenverarbeitungsframework, das Verarbeitungsaufgaben in sehr großen Datensätzen schnell ausführen und Datenverarbeitungsaufgaben auch auf mehrere Computer verteilen kann, entweder alleine oder zusammen mit anderen verteilten Computertools. Diese beiden Eigenschaften sind der Schlüssel zu den Welten Big Data und Machine Learning, die das Marshalling massiver Rechenleistung erfordern, um große Datenspeicher zu knacken., Spark nimmt auch einige der Programmierlasten dieser Aufgaben von den Schultern der Entwickler mit einer einfach zu bedienenden API, die einen Großteil der Grunzarbeit von Distributed Computing und Big Data-Verarbeitung abstrahiert.

Apache Spark ist seit seinen bescheidenen Anfängen im AMPLab an der U. C. Berkeley im Jahr 2009 zu einem der wichtigsten Big Data Distributed Processing Frameworks der Welt geworden. Spark kann auf verschiedene Arten bereitgestellt werden, bietet native Bindungen für die Programmiersprachen Java, Scala, Python und R und unterstützt SQL, Streaming-Daten, maschinelles Lernen und Diagrammverarbeitung., Sie finden es von Banken, Telekommunikationsunternehmen, Spielefirmen, Regierungen und allen großen Technologiegiganten wie Apple, Facebook, IBM und Microsoft verwendet.

Apache Spark architecture

Auf grundlegender Ebene besteht eine Apache Spark-Anwendung aus zwei Hauptkomponenten: einem Treiber, der den Code des Benutzers in mehrere Aufgaben umwandelt, die über Workerknoten verteilt werden können, und Executoren, die auf diesen Knoten ausgeführt werden und die ihnen zugewiesenen Aufgaben ausführen. Eine Form von Cluster-Manager ist notwendig, um zwischen den beiden zu vermitteln.,

Spark kann sofort in einem eigenständigen Clustermodus ausgeführt werden, für den einfach das Apache Spark Framework und eine JVM auf jedem Computer in Ihrem Cluster erforderlich sind. Es ist jedoch wahrscheinlicher, dass Sie ein robusteres Ressourcen-oder Cluster-Managementsystem nutzen möchten, um die Zuweisung von Arbeitskräften bei Bedarf für Sie zu übernehmen. Im Unternehmen bedeutet dies normalerweise, dass auf Hadoop YARN ausgeführt wird (so führen die Distributionen Cloudera und Hortonworks Spark-Jobs aus), aber Apache Spark kann auch auf Apache Mesos, Kubernetes und Docker Swarm ausgeführt werden.,

Wenn Sie nach einer verwalteten Lösung suchen, kann Apache Spark als Teil von Amazon EMR, Google Cloud Dataproc und Microsoft Azure HDInsight gefunden werden. Databricks, das Unternehmen, das die Gründer von Apache Spark beschäftigt, bietet auch die Databricks Unified Analytics-Plattform an, einen umfassenden verwalteten Dienst, der Apache Spark-Cluster, Streaming-Unterstützung, integrierte webbasierte Notebook-Entwicklung und optimierte Cloud-E/A-Leistung über eine standardmäßige Apache Spark-Distribution bietet.

Apache Spark erstellt die Datenverarbeitungsbefehle des Benutzers in einem gerichteten azyklischen Graphen oder DAG., Die DAG ist die Planungsebene von Apache Spark und bestimmt, welche Aufgaben auf welchen Knoten und in welcher Reihenfolge ausgeführt werden.

Spark vs. Hadoop: Warum verwenden Sie Apache Spark?

Es lohnt sich darauf hinzuweisen, dass Apache Spark vs. Apache Hadoop eine falsche Bezeichnung ist. Spark ist heutzutage in den meisten Hadoop-Distributionen enthalten. Aufgrund zweier großer Vorteile ist Spark jedoch zum Rahmen der Wahl bei der Verarbeitung von Big Data geworden und hat das alte MapReduce-Paradigma überholt, das Hadoop hervorgebracht hat.

Der erste Vorteil ist die Geschwindigkeit., Die In-Memory-Daten-Engine von Spark bedeutet, dass sie Aufgaben in bestimmten Situationen bis zu hundertmal schneller ausführen kann als MapReduce, insbesondere im Vergleich zu mehrstufigen Jobs, bei denen der Status zwischen den Phasen wieder auf die Festplatte geschrieben werden muss. Im Wesentlichen erstellt MapReduce ein zweistufiges Ausführungsdiagramm, das aus Datenzuordnung und-reduzierung besteht, während das DAG von Apache Spark über mehrere Stufen verfügt, die effizienter verteilt werden können. Selbst Apache-Spark-Jobs, bei denen die Daten nicht vollständig im Speicher enthalten sein können, sind in der Regel etwa zehnmal schneller als ihr MapReduce-Gegenstück.,

Der zweite Vorteil ist die entwicklerfreundliche Spark API. So wichtig die Beschleunigung von Spark auch ist, man könnte argumentieren, dass die Freundlichkeit der Spark-API noch wichtiger ist.

Spark Core

Im Vergleich zu MapReduce und anderen Apache Hadoop-Komponenten ist die Apache Spark-API für Entwickler sehr freundlich und verbirgt einen Großteil der Komplexität einer verteilten Verarbeitungsengine hinter einfachen Methodenaufrufen., Das kanonische Beispiel dafür ist, wie fast 50 Zeilen MapReduce-Code zum Zählen von Wörtern in einem Dokument auf nur wenige Zeilen Apache Spark reduziert werden können (hier in Scala gezeigt):

Durch die Bereitstellung von Bindungen an gängige Sprachen für die Datenanalyse wie Python und R sowie das unternehmensfreundlichere Java und Scala ermöglicht Apache Spark jedem von Anwendungsentwicklern bis hin zu Datenwissenschaftlern, seine Skalierbarkeit und Geschwindigkeit auf zugängliche Weise zu nutzen.,

Spark RDD

Im Mittelpunkt von Apache Spark steht das Konzept des Resilient Distributed Dataset (RDD), einer Programmierabstraktion, die eine unveränderliche Sammlung von Objekten darstellt, die über einen Computercluster verteilt werden können. Operationen auf den RDDs können auch über den Cluster verteilt und in einem parallelen Batch-Prozess ausgeführt werden, was zu einer schnellen und skalierbaren parallelen Verarbeitung führt.

RDDs können aus einfachen Textdateien, SQL-Datenbanken, NoSQL-Speichern (wie Cassandra und MongoDB), Amazon S3-Buckets und vielem mehr erstellt werden., Ein Großteil der Spark Core-API basiert auf diesem RDD-Konzept, das traditionelle Map-und Reduzierungsfunktionen ermöglicht, aber auch integrierte Unterstützung für das Verbinden von Datensätzen, Filtern, Sampling und Aggregation bietet.

Spark wird verteilt ausgeführt, indem ein Treiberkernprozess kombiniert wird, der eine Spark-Anwendung in Aufgaben aufteilt und sie auf viele Executor-Prozesse verteilt, die die Arbeit ausführen. Diese Executoren können nach Bedarf für die Anforderungen der Anwendung auf und ab skaliert werden.,

Spark SQL

Ursprünglich als Shark bekannt, ist Spark SQL für das Apache Spark-Projekt immer wichtiger geworden. Es ist wahrscheinlich die Schnittstelle, die am häufigsten von heutigen Entwicklern beim Erstellen von Anwendungen verwendet wird. Spark SQL konzentriert sich auf die Verarbeitung strukturierter Daten unter Verwendung eines Dataframe-Ansatzes, der von R und Python (in Pandas) entlehnt wurde. Wie der Name schon sagt, bietet Spark SQL auch eine SQL2003-kompatible Schnittstelle zum Abfragen von Daten, die sowohl Analysten als auch Entwicklern die Leistungsfähigkeit von Apache Spark bietet.,

Neben der Standard-SQL-Unterstützung bietet Spark SQL eine Standardschnittstelle zum Lesen und Schreiben von anderen Datenspeichern, einschließlich JSON, HDFS, Apache Hive, JDBC, Apache ORC und Apache Parquet, die alle sofort unterstützt werden. Andere beliebte Speicher-Apache Cassandra, MongoDB, Apache HBase und viele andere—können verwendet werden, indem separate Konnektoren aus dem Spark Packages-Ökosystem abgerufen werden.,

Die Auswahl einiger Spalten aus einem Datenrahmen ist so einfach wie diese Zeile:

citiesDF.select("name”, "pop”)

Mit der SQL-Schnittstelle registrieren wir den Datenrahmen als temporäre Tabelle, nach der wir SQL-Abfragen dagegen ausgeben können:

citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)

Apache Spark verwendet hinter den Kulissen einen Abfrageoptimierer namens Catalyst, der Daten und Abfragen untersucht, um eine Abfrage zu erstellen, die effizienter Abfrageplan für Datenlokalität und-berechnung, der die erforderlichen Berechnungen im gesamten Cluster durchführt. Im Apache Spark 2.,x era, die Spark SQL-Schnittstelle von Datenrahmen und Datensätzen (im Wesentlichen ein typisierter Datenrahmen, der zur Kompilierungszeit auf Korrektheit überprüft werden kann und weitere Speicher-und Rechenoptimierungen zur Laufzeit nutzt), ist der empfohlene Ansatz für die Entwicklung. Die RDD-Schnittstelle ist weiterhin verfügbar, wird jedoch nur empfohlen, wenn Ihre Anforderungen im Spark SQL-Paradigma nicht berücksichtigt werden können.

Spark 2.4 führte eine Reihe integrierter Funktionen höherer Ordnung zum direkten Bearbeiten von Arrays und anderen Datentypen höherer Ordnung ein.,

Spark MLlib

Apache Spark bündelt auch Bibliotheken für die Anwendung von Techniken des maschinellen Lernens und der Graphenanalyse auf Daten im Maßstab. Spark MLlib enthält ein Framework zum Erstellen von Pipelines für maschinelles Lernen, das die einfache Implementierung von Merkmalsextraktion, Auswahl und Transformationen in jedem strukturierten Datensatz ermöglicht. MLlib enthält verteilte Implementierungen von Clustering-und Klassifizierungsalgorithmen wie k-Means-Clustering und Random-Forests, die problemlos in benutzerdefinierte Pipelines ein-und ausgeschaltet werden können., Modelle können von Data Scientists in Apache Spark mit R oder Python trainiert, mit MLlib gespeichert und dann für die Produktion in eine Java-basierte oder Scala-basierte Pipeline importiert werden.

Beachten Sie, dass Spark MLlib zwar grundlegendes maschinelles Lernen einschließlich Klassifikation, Regression, Clustering und Filterung abdeckt, jedoch keine Einrichtungen zum Modellieren und Trainieren tiefer neuronaler Netzwerke enthält (Details siehe Spark MLlib Review von InfoWorld). Deep Learning Pipelines sind jedoch in Arbeit.,

Spark GraphX

Spark GraphX enthält eine Auswahl verteilter Algorithmen zur Verarbeitung von Diagrammstrukturen, einschließlich einer Implementierung des PageRank von Google. Diese Algorithmen verwenden den RDD-Ansatz von Spark Core, um Daten zu modellieren; Mit dem GraphFrames-Paket können Sie Diagrammoperationen für Datenrahmen ausführen, einschließlich der Nutzung des Catalyst Optimizer für Diagrammabfragen.

Spark Streaming

Spark Streaming war eine frühe Ergänzung zu Apache Spark, die dazu beitrug, dass es in Umgebungen, die eine Echtzeit-oder nahezu Echtzeitverarbeitung erforderten, an Zugkraft gewann., Zuvor waren Batch-und Stream-Verarbeitung in der Welt von Apache Hadoop getrennte Dinge. Sie würden MapReduce-Code für Ihre Stapelverarbeitungsanforderungen schreiben und so etwas wie Apache Storm für Ihre Echtzeit-Streaming-Anforderungen verwenden. Dies führt offensichtlich zu unterschiedlichen Codebasen, die für die Anwendungsdomäne synchron gehalten werden müssen, obwohl sie auf völlig unterschiedlichen Frameworks basieren, unterschiedliche Ressourcen erfordern und unterschiedliche betriebliche Bedenken für deren Ausführung mit sich bringen.,

Spark Streaming erweiterte das Apache Spark-Konzept der Stapelverarbeitung in Streaming, indem der Stream in eine fortlaufende Reihe von Microbatches aufgeteilt wurde, die dann mit der Apache Spark API manipuliert werden konnten. Auf diese Weise kann Code in Batch-und Streaming-Operationen (meistens) denselben Code gemeinsam nutzen, der auf demselben Framework ausgeführt wird, wodurch sowohl der Entwickler-als auch der Betreiberaufwand reduziert wird. Jeder gewinnt.,

Kritik am Spark-Streaming-Ansatz ist, dass Microbatching in Szenarien, in denen eine Antwort mit geringer Latenz auf eingehende Daten erforderlich ist, möglicherweise nicht mit der Leistung anderer Streaming-fähiger Frameworks wie Apache Storm, Apache Flink und Apache Apex übereinstimmt, die alle eine reine Streaming-Methode anstelle von Microbatches verwenden.

Strukturiertes Streaming

Strukturiertes Streaming (hinzugefügt in Spark 2.x) ist das Spark-Streaming, was Spark SQL für die Spark Core-APIs war: Eine übergeordnete API und eine einfachere Abstraktion zum Schreiben von Anwendungen., Im Falle von Struktur-Streaming ermöglicht die übergeordnete API Entwicklern im Wesentlichen, unendliche Streaming-Datenrahmen und-Datensätze zu erstellen. Es löst auch einige sehr reale Schmerzpunkte, mit denen Benutzer im früheren Framework zu kämpfen hatten, insbesondere beim Umgang mit Ereigniszeitaggregationen und der verspäteten Zustellung von Nachrichten. Alle Abfragen zu strukturierten Streams werden über den Catalyst Query Optimizer ausgeführt und können sogar interaktiv ausgeführt werden, sodass Benutzer SQL-Abfragen für Live-Streaming-Daten ausführen können.,

Strukturiertes Streaming stützte sich ursprünglich auf das Microbatching-Schema von Spark Streaming für den Umgang mit Streaming-Daten. In Spark 2.3 hat das Apache Spark-Team dem strukturierten Streaming jedoch einen kontinuierlichen Verarbeitungsmodus mit geringer Latenz hinzugefügt, der es ermöglicht, Antworten mit Latenzen von nur 1 ms zu verarbeiten, was sehr beeindruckend ist. Ab Spark 2.4 gilt die kontinuierliche Verarbeitung immer noch als experimentell. Während strukturiertes Streaming auf der Spark SQL-Engine basiert, unterstützt kontinuierliches Streaming nur eine begrenzte Anzahl von Abfragen.,

Strukturiertes Streaming ist die Zukunft von Streaming-Anwendungen mit der Plattform, wenn Sie also eine neue Streaming-Anwendung erstellen, sollten Sie strukturiertes Streaming verwenden. Die Legacy-Spark-Streaming-APIs werden weiterhin unterstützt, aber das Projekt empfiehlt die Portierung auf strukturiertes Streaming, da die neue Methode das Schreiben und Verwalten von Streaming-Code viel erträglicher macht.

Deep Learning-Pipelines

der Apache Spark unterstützt deep learning via Deep Learning Pipelines., Mithilfe der vorhandenen Pipeline-Struktur von MLlib können Sie Deep-Learning-Bibliotheken auf niedrigerer Ebene aufrufen und Klassifikatoren in nur wenigen Codezeilen erstellen sowie benutzerdefinierte TensorFlow-Diagramme oder Keras-Modelle auf eingehende Daten anwenden. Diese Diagramme und Modelle können sogar als benutzerdefinierte Spark SQL UDFs (benutzerdefinierte Funktionen) registriert werden, sodass die Deep Learning-Modelle als Teil von SQL-Anweisungen auf Daten angewendet werden können.

Apache-Spark tutorials

Ready to dive in and learn Apache Spark?, Wir empfehlen Evan Heitmans A Neanderthal ‚ s Guide to Apache Spark in Python, der nicht nur die Grundlagen der Funktionsweise von Apache Spark in relativ einfachen Begriffen beschreibt, sondern Sie auch durch den Prozess des Schreibens einer einfachen Python-Anwendung führt, die das Framework verwendet. Der Artikel ist aus der Sicht eines Data Scientist geschrieben, was sinnvoll ist, da Data Science eine Welt ist, in der Big Data und maschinelles Lernen zunehmend kritisch sind.,

Wenn Sie nach Apache Spark-Beispielen suchen, um Ihnen ein Gefühl dafür zu geben, was die Plattform tun kann und wie sie dies tut, schauen Sie sich Spark By {Examples} an. Es gibt hier viel Beispielcode für eine Reihe der grundlegenden Aufgaben, aus denen die Bausteine der Spark-Programmierung bestehen, sodass Sie die Komponenten sehen können, aus denen die größeren Aufgaben bestehen, für die Apache Spark gemacht ist.

Müssen tiefer gehen? DZone hat das, was es bescheiden als die komplette Apache Spark-Sammlung bezeichnet, die aus einer Reihe hilfreicher Tutorials zu vielen Apache Spark-Themen besteht. Glückliches Lernen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Zur Werkzeugleiste springen