Apache Spark DStream (Discretized Streams)

iun. 1, 2021
admin

Rămâneți la curent cu cele mai recente tendințe tehnologice
Alăturați-vă lui DataFlair pe Telegram!!!

Obiectiv

Acest tutorial Spark, vă conduce prin Apache Spark DStream. Mai întâi de toate, vom vedea ce este Spark Streaming, apoi, ce este DStream în Apache Spark. Operațiunile Discretized Stream, adică transformările Stateless și Stateful, operațiunea de ieșire, DStream de intrare și receptoarele sunt, de asemenea, discutate în acest blog Apache Spark.

Apache Spark DStream (Discretized Streams)

Apache Spark DStream (Discretized Streams)

Introducere la DStream în Apache Spark

În această secțiune, vom învăța despre DStream. Care este rolul și responsabilitatea sa în Spark Streaming? Aceasta include ce metode sunt inculcate pentru a face față fluxului de date în direct.
Ca o extensie a API-ului Apache Spark, Spark Streaming este un sistem tolerant la erori, cu debit mare. Acesta procesează fluxul live de date. Spark Streaming preia datele de intrare de la diverse surse de intrare fiabile, cum ar fi Flume, HDFS și Kafka etc. și apoi trimite datele procesate către sisteme de fișiere, baze de date sau tablouri de bord în direct. Fluxul de date de intrare este împărțit în loturi de date și apoi generează fluxul final al rezultatului în loturi.

Spark DStream (Discretized Stream) este abstracția de bază a Spark Streaming. DStream este un flux continuu de date. Acesta primește intrări din diverse surse, cum ar fi Kafka, Flume, Kinesis sau socket-uri TCP. Poate fi, de asemenea, un flux de date generat prin transformarea fluxului de intrare. În esența sa, DStream este un flux continuu de RDD (abstracție Spark). Fiecare RDD din DStream conține date dintr-un anumit interval.

Care operațiune asupra unui DStream se aplică tuturor RDD-urilor subiacente. DStream acoperă toate detaliile. Acesta oferă dezvoltatorului un API de nivel înalt pentru comoditate. Ca urmare, Spark DStream facilitează lucrul cu date în flux.

Spark Streaming oferă proprietăți de toleranță la erori pentru DStreams ca și pentru RDD-uri. atâta timp cât este disponibilă o copie a datelor de intrare, se poate recompune orice stare din acestea folosind linia de descendență a RDD-urilor. În mod implicit, Spark replică datele pe două noduri. Ca urmare, Spark Streaming poate suporta eșecurile unui singur lucrător.

Apache Spark DStream Operations

Ca și RDD, Spark DStream suportă, de asemenea, două tipuri de Operațiuni: Transformări și Operațiuni de ieșire-

i. Transformări

Există două tipuri de transformări în DStream:

  • Transformări fără stare
  • Transformări cu stare

a. Transformări fără stare

Procesarea fiecărui lot nu depinde de datele din loturile anterioare. Transformările fără stare sunt simple transformări RDD. Se aplică fiecărui lot, adică fiecărui RDD dintr-un DStream. Include transformări comune ale RDD, cum ar fi map(), filter(), reduceByKey() etc.
Deși aceste funcții par să se aplice întregului flux, fiecare DStream este o colecție de mai multe RDD (loturi). Ca urmare, fiecare transformare fără stare se aplică fiecărui RDD.

Transformările fără stare sunt capabile să combine date din mai multe DStream-uri în cadrul fiecărui pas de timp. De exemplu, DStreams cu cheie/valoare au aceleași transformări legate de îmbinare ca și RDD-urile – cogroup(), join(), leftOuterJoin() etc.

Potem folosi aceste operații pe DStreams pentru a efectua operații RDD subiacente pe fiecare lot.

Dacă transformările fără stare sunt insuficiente, DStreams vine cu un operator avansat numit transform(). transform() permite operarea asupra RDD-urilor din interiorul lor. Transform() permite ca orice funcție arbitrară de la RDD la RDD să acționeze asupra DStream-ului. Această funcție este apelată la fiecare lot de date din flux pentru a produce un nou flux.

b. Stateful Transformations

Utilizează date sau rezultate intermediare din loturile anterioare și calculează rezultatul lotului curent. Transformările cu stare sunt operații asupra fluxurilor DS care urmăresc datele în timp. Astfel, se utilizează unele date din loturile anterioare pentru a genera rezultatele pentru un nou lot.

Cele două tipuri principale sunt operațiile windowed, care acționează pe o fereastră glisantă de perioade de timp, și updateStateByKey(), care se utilizează pentru a urmări starea de-a lungul evenimentelor pentru fiecare cheie (de exemplu, pentru a construi un obiect care să reprezinte fiecare sesiune de utilizator).

Să urmați acest link pentru a citi transformările DStream în detaliu cu exemplele.

ii. Operațiunea de ieșire

După ce obținem datele după transformare, pe aceste date se efectuează operațiunea de ieșire a datelor în Spark Streaming. După depanarea programului nostru, folosind operațiunea de ieșire putem doar să salvăm ieșirea noastră. Unele dintre operațiunile de ieșire sunt print(), save() etc.. Operațiunea de salvare are în vedere directorul în care se salvează fișierul și un sufix opțional. Operațiunea print() preia primele 10 elemente din fiecare lot din DStream și tipărește rezultatul.

Input DStreams and Receivers

Input DStream este un DStream care reprezintă fluxul de date de intrare de la sursa de streaming. Obiectul Receiver (Scala doc, Java doc) asociat fiecărui obiect DStream de intrare. Acesta primește datele de la o sursă și le stochează în memoria Spark pentru procesare.

Spark Streaming oferă două categorii de surse de streaming încorporate:

  • Surse de bază – Acestea sunt surse care sunt direct disponibile în API-ul StreamingContext. Exemple: sisteme de fișiere și conexiuni socket.
  • Surse avansate – Aceste surse sunt disponibile prin clase utilitare suplimentare, cum ar fi Kafka, Flume, Kinesis. Astfel, necesită asocierea cu dependențe suplimentare.

De exemplu:

  • Kafka: artefactul necesar pentru Kafka este spark-streaming-kafka-0-8_2.11.
  • Flume: artefactul necesar pentru Flume este dspark-streaming-flume_2.11.
  • Kinesis: artefactul necesar pentru Kinesis este spark-streaming-kinesis-asl_2.11.

Se creează mai multe intrări DStream pentru a primi mai multe fluxuri de date în paralel. Creează mai multe receptoare care primesc mai multe fluxuri de date. Spark worker/executor este o sarcină cu durată lungă de execuție. Astfel, ocupă unul dintre nucleele care se asociază aplicației Spark Streaming. Astfel, este necesar ca, aplicația Spark Streaming să aibă suficiente nuclee pentru a procesa datele primite.

Concluzie

În concluzie, la fel ca RDD în Spark, Spark Streaming oferă o abstracțiune de nivel înalt cunoscută sub numele de DStream. DStream reprezintă un flux continuu de date. La nivel intern, DStream este portretizat ca o secvență de RDD-uri. Astfel, la fel ca RDD, putem obține DStream din DStream de intrare, cum ar fi Kafka, Flume etc. De asemenea, transformarea poate fi aplicată pe DStream-ul existent pentru a obține un nou DStream.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.