Apache Spark DStream (Discretized Streams)

Jun 1, 2021
admin

Bleiben Sie mit den neuesten Technologietrends auf dem Laufenden
Join DataFlair on Telegram!!!

Ziel

Dieses Spark-Tutorial führt Sie durch Apache Spark DStream. Zuerst werden wir sehen, was Spark Streaming ist und dann, was DStream in Apache Spark ist. Diskretisierte Stream-Operationen, d. h. zustandslose und zustandsbehaftete Transformationen, Ausgabeoperationen, Eingabe-DStream und Empfänger werden in diesem Apache Spark-Blog ebenfalls besprochen.

Apache Spark DStream (Diskretisierte Streams)

Apache Spark DStream (Diskretisierte Streams)

Einführung in DStream in Apache Spark

In diesem Abschnitt werden wir etwas über DStream erfahren. Was sind seine Rolle und Verantwortung in Spark Streaming? Dazu gehören alle Methoden, die für das Live-Streaming von Daten eingesetzt werden.
Als Erweiterung der Apache Spark-API ist Spark Streaming ein fehlertolerantes System mit hohem Durchsatz. Es verarbeitet den Livestream von Daten. Spark Streaming nimmt Eingaben von verschiedenen zuverlässigen Eingangsquellen wie Flume, HDFS und Kafka usw. entgegen und sendet die verarbeiteten Daten dann an Dateisysteme, Datenbanken oder Live-Dashboards. Der Eingabedatenstrom wird in Datenstapel aufgeteilt und erzeugt dann den endgültigen Strom der Ergebnisse in Stapeln.

Spark DStream (Discretized Stream) ist die grundlegende Abstraktion von Spark Streaming. DStream ist ein kontinuierlicher Strom von Daten. Er empfängt Input aus verschiedenen Quellen wie Kafka, Flume, Kinesis oder TCP-Sockets. Er kann auch ein Datenstrom sein, der durch die Umwandlung des Eingabestroms erzeugt wird. Im Kern ist DStream ein kontinuierlicher Strom von RDD (Spark-Abstraktion). Jeder RDD in DStream enthält Daten aus einem bestimmten Intervall.

Jede Operation an einem DStream gilt für alle zugrunde liegenden RDDs. DStream deckt alle Details ab. Es bietet dem Entwickler eine High-Level-API für die Bequemlichkeit. Daher erleichtert Spark DStream die Arbeit mit Streaming-Daten.

Spark Streaming bietet für DStreams die gleichen Fehlertoleranzeigenschaften wie für RDDs. Solange eine Kopie der Eingabedaten verfügbar ist, kann es jeden Zustand daraus neu berechnen, indem es die Abstammung der RDDs verwendet. Standardmäßig repliziert Spark die Daten auf zwei Knoten. Daher kann Spark Streaming Ausfälle eines einzelnen Arbeiters verkraften.

Apache Spark DStream-Operationen

Wie RDD unterstützt auch Spark DStream zwei Arten von Operationen: Transformationen und Ausgabeoperationen-

i. Transformation

Es gibt zwei Arten von Transformationen in DStream:

  • Zustandslose Transformationen
  • Zustandsbezogene Transformationen

a. Zustandslose Transformationen

Die Verarbeitung eines jeden Stapels ist nicht von den Daten der vorherigen Stapel abhängig. Zustandslose Transformationen sind einfache RDD-Transformationen. Sie gelten für jeden Stapel, d.h. für jedes RDD in einem DStream. Dazu gehören gängige RDD-Transformationen wie map(), filter(), reduceByKey() usw.
Obwohl diese Funktionen scheinbar auf den gesamten Stream angewendet werden, ist jeder DStream eine Sammlung von vielen RDDs (Batches). Daher gilt jede zustandslose Transformation für jedes RDD.

Zustandslose Transformationen sind in der Lage, Daten aus vielen DStreams in jedem Zeitschritt zu kombinieren. Zum Beispiel haben Schlüssel/Wert-DStreams die gleichen Join-bezogenen Transformationen wie RDDs – cogroup(), join(), leftOuterJoin() usw.

Wir können diese Operationen auf DStreams verwenden, um die zugrunde liegenden RDD-Operationen auf jedem Batch auszuführen.

Wenn zustandslose Transformationen nicht ausreichen, verfügt DStreams über einen erweiterten Operator namens transform(). transform() ermöglicht Operationen auf den RDDs in ihnen. Mit transform() kann jede beliebige RDD-zu-RDD-Funktion auf den DStream wirken. Diese Funktion wird für jeden Datenstapel im Stream aufgerufen, um einen neuen Stream zu erzeugen.

b. Stateful Transformations

Sie verwendet Daten oder Zwischenergebnisse aus früheren Stapeln und berechnet das Ergebnis des aktuellen Stapels. Zustandsbezogene Transformationen sind Operationen auf DStreams, die Daten über die Zeit verfolgen. So werden einige Daten aus früheren Stapeln verwendet, um die Ergebnisse für einen neuen Stapel zu generieren.

Die beiden Haupttypen sind windowed operations, die über ein gleitendes Zeitfenster wirken, und updateStateByKey(), das verwendet wird, um den Zustand über Ereignisse für jeden Schlüssel zu verfolgen (z.B. um ein Objekt zu erstellen, das jede Benutzersitzung repräsentiert).

Folgen Sie diesem Link, um DStream-Transformationen im Detail mit den Beispielen zu lesen.

ii. Ausgabeoperation

Wenn wir die Daten nach der Transformation erhalten, wird die Ausgabeoperation in Spark Streaming durchgeführt. Nach dem Debugging unseres Programms können wir mit Hilfe der Ausgabeoperation nur unsere Ausgabe speichern. Einige der Ausgabeoperationen sind print(), save() usw.. Die save-Operation nimmt das Verzeichnis, in dem die Datei gespeichert werden soll, und ein optionales Suffix auf. print() nimmt die ersten 10 Elemente aus jedem Stapel des DStreams auf und gibt das Ergebnis aus.

Eingabe-DStreams und Empfänger

Eingabe-DStream ist ein DStream, der den Strom von Eingabedaten aus einer Streaming-Quelle darstellt. Receiver (Scala doc, Java doc) ist ein Objekt, das mit jedem Input-DStream-Objekt verbunden ist. Es empfängt die Daten von einer Quelle und speichert sie im Speicher von Spark zur Verarbeitung.

Spark Streaming bietet zwei Kategorien von eingebauten Streaming-Quellen:

  • Basisquellen – Dies sind Quellen, die direkt in der StreamingContext-API verfügbar sind. Beispiele: Dateisysteme und Socket-Verbindungen.
  • Fortgeschrittene Quellen – Diese Quellen sind über zusätzliche Utility-Klassen wie Kafka, Flume, Kinesis verfügbar. Daher ist eine Verknüpfung mit zusätzlichen Abhängigkeiten erforderlich.

Beispiel:

  • Kafka: Das für Kafka erforderliche Artefakt ist spark-streaming-kafka-0-8_2.11.
  • Flume: das für Flume benötigte Artefakt ist dspark-streaming-flume_2.11.
  • Kinesis: das für Kinesis benötigte Artefakt ist spark-streaming-kinesis-asl_2.11.

Es erstellt viele Eingänge DStream, um mehrere Datenströme parallel zu empfangen. Es erstellt mehrere Empfänger, die viele Datenströme empfangen. Spark Worker/Executor ist eine lang laufende Aufgabe. Daher belegt er einen der Kerne, die mit der Spark-Streaming-Anwendung verbunden sind. Daher ist es notwendig, dass die Spark Streaming-Anwendung über genügend Kerne verfügt, um die empfangenen Daten zu verarbeiten.

Abschluss

Zusammenfassend lässt sich sagen, dass Spark Streaming, genau wie RDD in Spark, eine High-Level-Abstraktion bereitstellt, die als DStream bekannt ist. DStream repräsentiert einen kontinuierlichen Strom von Daten. Intern wird DStream als eine Folge von RDDs dargestellt. Wie bei RDD können wir also DStream aus Eingabe-DStreams wie Kafka, Flume usw. erhalten. Die Transformation kann auch auf den vorhandenen DStream angewendet werden, um einen neuen DStream zu erhalten.

Schreibe einen Kommentar

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