Aportat per Prithviraj Bose
En aquest bloc parlarem del concepte de finestra de les transformacions estatals d’Apache Spark.
Què és la transformació estatal?
Spark streaming utilitza una arquitectura de micro lots on les dades entrants s’agrupen en micro lots anomenats Streams Discretized (DStreams) que també serveixen com a abstracció bàsica de programació. Els DStreams internament tenen conjunts de dades distribuïts resilients (RDD) i, com a resultat d’aquest estàndard, es poden fer transformacions i accions RDD.
En la transmissió si tenim un cas d’ús per fer un seguiment de dades entre lots, necessitem DStreams d’estat.
Per exemple, podem fer un seguiment de la interacció d’un usuari en un lloc web durant la sessió de l’usuari o podem fer un seguiment d’un hashtag de twitter concret a través del temps i veure quins usuaris de tot el món en parlen.
Tipus de transformació estatal.
Els DStreams estatals són de dos tipus: seguiment basat en finestres i seguiment de sessions completes.
Per al seguiment estatal, totes les dades entrants s'han de transformar en parells clau-valor de manera que es puguin fer un seguiment dels estats clau entre lots. Aquesta és una condició prèvia.
A més, també hauríem d’habilitar checkpointing, un concepte que parlarem en els blocs posteriors.
> Seguiment basat en finestres
Al seguiment basat en finestres, els lots entrants s’agrupen en intervals de temps, és a dir, grups de grups cada ‘x’ segons. Més càlculs en aquests lots es fan mitjançant intervals de diapositives.
com utilitzar paquets a Java
Per exemple, si l'interval de finestra = 3 segons i l'interval de diapositives = 2 segons, totes les dades entrants s'agruparan per lots cada 3 segons i els càlculs d'aquests lots es produiran cada 2 segons. Alternativament, podem dir, fer càlculs cada 2 segons als lots que van arribar en els darrers 3 segons.
Al diagrama anterior veiem que els lots entrants s’agrupen cada 3 unitats de temps (interval de finestra) i els càlculs es fan cada 2 unitats de temps (interval de diapositives).
Nota: a diferència d’Apache Flink, Apache Spark no té cap concepte de finestra caiguda, totes les finestres es llisquen.
INCENDI
Una API popular per a transformacions basades en finestres és
PairDStreamFunctions.reduceByKeyAndWindow .
Hi ha diverses versions sobrecarregades d’aquesta API. Vegem la que té més paràmetres. Després d'aquesta explicació, la resta de versions sobrecarregades d'aquesta API haurien d'explicar-se per si mateixes.
Retorna: el DStream transformat [(K, V)]
reduceFunc : La funció de reducció associativa.
invReduceFunc : La inversa de la funció de reducció anterior. Això és necessari per a un càlcul eficient dels lots entrants i sortints. Amb l'ajut d'aquesta funció, es dedueix el valor dels lots que surten del valor acumulat de la funció de reducció anterior. Per exemple, si estem calculant la suma dels valors entrants per a les claus respectives, per als lots sortints restarem els valors de les claus respectives (sempre que estiguin presents en el lot actual, en cas contrari).
finestraDuració : Unitats de temps per agrupar els lots, hauria de ser un múltiple de l'interval de lots.
slideDuration : Unitats de temps per al càlcul, hauria de ser un múltiple de l'interval de lots. particions : El particionador que cal utilitzar per emmagatzemar el DStream resultant. Per obtenir més informació sobre particions, llegiu això .
filterFunc : Funció per filtrar els parells clau-valor caducats, és a dir, per exemple, si no obtenim cap actualització per a una clau durant algun temps, potser voldríem eliminar-la.
Aquí hi ha un programa per comptar les paraules provinents d'un corrent de socket. Hem utilitzat la versió sobrecarregada de la funció anterior amb un interval de finestra de 4 segons i un interval de diapositives de 2 segons.
Al meu proper bloc escriuré sobre el seguiment i el control de sessions complets.
Tens alguna pregunta? Esmenta’l a la secció de comentaris i et respondrem.
Articles Relacionats: