Apache Spark DStream (Discretized Streams)

jun 1, 2021
admin

Hold dig opdateret med de seneste teknologiske trends
Gå med i DataFlair på Telegram!!!

Objektiv

Denne Spark-tutorial giver dig en gennemgang af Apache Spark DStream. Først og fremmest vil vi se, hvad der er Spark Streaming, derefter, hvad der er DStream i Apache Spark. Diskretiserede stream-operationer, dvs. stateless og stateful transformationer, output-operation, input DStream og modtagere behandles også i denne Apache Spark-blog.

Apache Spark DStream (Discretized Streams)

Apache Spark DStream (Discretized Streams)

Introduktion til DStream i Apache Spark

I dette afsnit vil vi lære om DStream. Hvad er dens rolle og ansvar i Spark Streaming? Det omfatter, hvilke alle metoder der er indarbejdet for at håndtere live streaming af data.
Som en udvidelse til Apache Spark API er Spark Streaming fejltolerant, høj gennemstrømningssystem. Det behandler den levende strøm af data. Spark Streaming tager input fra forskellige pålidelige inputkilder som Flume, HDFS og Kafka osv. og sender derefter de behandlede data til filsystemer, databaser eller live-dashboards. Inputdatastrømmen opdeles i batches af data og genererer derefter den endelige strøm af resultatet i batches.

Spark DStream (Discretized Stream) er den grundlæggende abstraktion af Spark Streaming. DStream er en kontinuerlig strøm af data. Den modtager input fra forskellige kilder som Kafka, Flume, Kinesis eller TCP-soketter. Det kan også være en datastrøm, der genereres ved at transformere inputstrømmen. I sin kerne er DStream en kontinuerlig strøm af RDD (Spark-abstraktion). Hver RDD i DStream indeholder data fra det bestemte interval.

Alle operationer på en DStream gælder for alle de underliggende RDD’er. DStream dækker alle detaljer. Det giver udvikleren en API på højt niveau for nemheds skyld. Som følge heraf letter Spark DStream arbejdet med streaming data.

Spark Streaming tilbyder fejltoleranceegenskaber for DStreams som for RDD’er. så længe en kopi af inputdataene er tilgængelig, kan den genberegne enhver tilstand fra den ved hjælp af RDD’ernes afstamning. Som standard replikerer Spark data på to knudepunkter. Som følge heraf kan Spark Streaming tåle fejl på en enkelt medarbejder.

Apache Spark DStream Operations

Som RDD understøtter Spark DStream også to typer Operationer: Transformationer og output Operationer-

i. Transformation

Der er to typer af transformationer i DStream:

  • Stateless Transformations
  • Stateful Transformations

a. Stateless Transformations

Behandlingen af hver batch har ingen afhængighed af dataene fra tidligere batches. Stateless-transformationer er simple RDD-transformationer. Den gælder for hver batch, hvilket betyder hver RDD i en DStream. Den omfatter almindelige RDD-transformationer som map(), filter(), reduceByKey() osv.
Selv om disse funktioner ser ud til at gælde for hele strømmen, er hver DStream en samling af mange RDD’er (batches). Som følge heraf gælder hver stateless transformation for hver RDD.

Stateless transformationer er i stand til at kombinere data fra mange DStreams inden for hvert tidstrin. For eksempel har nøgle/værdi-DStreams de samme join-relaterede transformationer som RDD’er – cogroup(), join(), leftOuterJoin() osv.

Vi kan bruge disse operationer på DStreams til at udføre underliggende RDD-operationer på hver batch.

Hvis stateless-transformationer ikke er tilstrækkelige, leveres DStreams med en avanceret operatør kaldet transform(). transform() gør det muligt at operere på RDD’erne i dem. Transform() gør det muligt for enhver vilkårlig RDD-til-RDD-funktion at handle på DStream’en. Denne funktion bliver kaldt på hver batch af data i strømmen for at producere en ny strøm.

b. Stateful Transformations

Den bruger data eller mellemresultater fra tidligere batches og beregner resultatet af den aktuelle batch. Stateful-transformationer er operationer på DStreams, der sporer data på tværs af tid. Den gør således brug af nogle data fra tidligere batches til at generere resultaterne for en ny batch.

De to hovedtyper er vinduesoperationer, som virker over et glidende vindue af tidsperioder, og updateStateByKey(), som bruges til at spore tilstanden på tværs af begivenheder for hver nøgle (f.eks. til at opbygge et objekt, der repræsenterer hver brugersession).

Følg dette link for at læse DStreamtransformationer i detaljer med eksempler.

ii. Output Operation

Når vi får dataene efter transformationen, udføres outputoperationen på disse data i Spark Streaming. Efter debugging af vores program kan vi ved hjælp af outputoperation kun gemme vores output. Nogle af outputoperationerne er print(), save() osv. Save-operationen tager den mappe, som filen skal gemmes i, og et valgfrit suffiks. print() tager de første 10 elementer fra hver batch af DStream og udskriver resultatet.

Input DStream og modtagere

Input DStream er en DStream, der repræsenterer strømmen af inputdata fra streamingkilde. Receiver (Scala-dokument, Java-dokument) er et objekt, der er tilknyttet hvert input DStream-objekt. Det modtager dataene fra en kilde og gemmer dem i Spark-hukommelsen til behandling.

Spark Streaming indeholder to kategorier af indbyggede streamingkilder:

  • Grundlæggende kilder – Det er Kilde, som er direkte tilgængelig i StreamingContext API’en. Eksempler: filsystemer og socketforbindelser.
  • Avancerede kilder – Disse kilder er tilgængelige ved hjælp af ekstra utility-klasser som Kafka, Flume og Kinesis. Kræver således linking mod ekstra afhængigheder.

For eksempel:

  • Kafka: Artefaktet, der kræves for Kafka, er spark-streaming-kafka-0-8_2.11.
  • Flume: Artefaktet, der kræves til Flume, er dspark-streaming-flume_2.11.
  • Kinesis: Artefaktet, der kræves for Kinesis, er spark-streaming-kinesis-asl_2.11.

Det opretter mange indgange DStream for at modtage flere datastrømme parallelt. Den opretter flere modtagere, der modtager mange datastrømme. Spark worker/executor er en opgave, der løber i lang tid. Den optager således en af de kerner, der er tilknyttet Spark Streaming-applikationen. Så det er nødvendigt, at Spark Streaming-applikationen har nok kerner til at behandle de modtagne data.

Slutning

Sammenfattende giver Spark Streaming ligesom RDD i Spark en abstraktion på højt niveau kendt som DStream. DStream repræsenterer en kontinuerlig strøm af data. Internt er DStream portrætteret som en sekvens af RDD’er. Ligesom RDD kan vi således få DStream fra input-DStream som Kafka, Flume osv. Transformationen kan også anvendes på den eksisterende DStream for at få en ny DStream.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.