Transformări de stare cu Windowing în Spark Streaming



Această postare pe blog discută despre transformările de stare cu ferestrele în Spark Streaming. Aflați totul despre urmărirea datelor pe loturi folosind stream-uri D-state.

Contribuție de Prithviraj Bose

În acest blog vom discuta despre conceptul de fereastră al transformărilor de stare ale lui Apache Spark.





Ce este transformarea de stare?

Spark streaming folosește o arhitectură micro-lot în care datele primite sunt grupate în micro-loturi numite Fluxuri discretizate (DStreams) care servesc și ca abstracție de programare de bază. DStreams intern are seturi de date distribuite rezistente (RDD) și, ca urmare a acestui standard, se pot face transformări și acțiuni RDD.



În flux, dacă avem un caz de utilizare pentru a urmări datele pe loturi, atunci avem nevoie de DStream-uri de stat.

De exemplu, putem urmări interacțiunea unui utilizator într-un site web în timpul sesiunii de utilizator sau putem urmări un anumit hashtag twitter de-a lungul timpului și putem vedea care utilizatori din întreaga lume vorbesc despre el.

Tipuri de transformare de stat.



DStream-urile de stat sunt de două tipuri - urmărire bazată pe ferestre și urmărire completă a sesiunii.

Pentru urmărirea stării, toate datele primite ar trebui transformate în perechi cheie-valoare astfel încât stările cheie să poată fi urmărite pe loturi. Aceasta este o condiție prealabilă.

Mai mult, ar trebui să permitem checkpointing, un concept pe care îl vom discuta în blogurile ulterioare.

> Urmărire bazată pe ferestre

În urmărirea bazată pe ferestre, loturile primite sunt grupate în intervale de timp, adică loturile de grup la fiecare „x” secunde. Alte calcule pe aceste loturi se fac folosind intervale de diapozitive.

testare cross-browser în seleniu

De exemplu, dacă intervalul de fereastră = 3 secunde și intervalul de diapozitive = 2 secunde, atunci toate datele primite vor fi grupate în loturi la fiecare 3 secunde, iar calculele acestor loturi vor avea loc la fiecare 2 secunde. Alternativ, putem spune, faceți calcule la fiecare 2 secunde pe loturile care au ajuns în ultimele 3 secunde.

spark-streaming-dstream-window

În diagrama de mai sus vedem că loturile primite sunt grupate la fiecare 3 unități de timp (interval de fereastră) și calculele se fac la fiecare 2 unități de timp (interval de diapozitive).
Notă: spre deosebire de Apache Flink, Apache Spark nu are un concept de fereastră care se prăbușește, toate ferestrele glisează.

FOC

Un API popular pentru transformările bazate pe ferestre este

PairDStreamFunctions.reduceByKeyAndWindow .

Există mai multe versiuni supraîncărcate ale acestui API, să vedem cea care are cel mai mare număr de parametri. După această explicație, restul versiunilor supraîncărcate ale acestui API ar trebui să fie auto-explicative.

Returnează: DStream transformat [(K, V)]

reduceFunc : Funcția de reducere asociativă.

invReduceFunc : Funcția inversă a celor de mai sus reduce. Acest lucru este necesar pentru calculul eficient al loturilor de intrare și ieșire. Cu ajutorul acestei funcții, valoarea loturilor care sunt expediate este dedusă din valoarea acumulată a funcției de reducere de mai sus. De exemplu, dacă calculăm suma valorilor de intrare pentru cheile respective, atunci pentru loturile de ieșire vom scădea valorile pentru cheile respective (cu condiția să fie prezente în lotul curent, altfel ignorăm).

windowDuration : Unități de timp pentru gruparea loturilor, acesta ar trebui să fie un multiplu al intervalului lotului.

slideDuration : Unități de timp pentru calcul, acesta ar trebui să fie un multiplu al intervalului de lot. partiții : Partiționatorul de utilizat pentru stocarea DStream rezultat. Pentru mai multe informații despre partiționare citiți acest .

filterFunc : Funcție de filtrare a perechilor cheie-valoare expirate, adică, de exemplu, dacă nu primim o actualizare pentru o cheie pentru o perioadă de timp, este posibil să dorim să o eliminăm.

Iată un program pentru a număra cuvintele provenite dintr-un flux socket. Am folosit o versiune supraîncărcată a funcției de mai sus cu un interval de fereastră de 4 secunde și un interval de diapozitive de 2 secunde.

În următorul meu blog voi scrie despre urmărirea completă a sesiunii și punctele de control.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.

Postări asemănatoare:

Caching distribuit cu variabile difuzate