Mga Stateful Transformation na may Windowing sa Spark Streaming



Tumatalakay ang post sa blog na ito ng mga makabuluhang pagbabago na may windowing sa Spark Streaming. Alamin ang lahat tungkol sa pagsubaybay ng data sa lahat ng mga batch gamit ang mga D-Stream na buong estado.

Ibinigay ni Prithviraj Bose

Sa blog na ito tatalakayin namin ang windowing konsepto ng mga makabuluhang pagbabago sa Apache Spark.





Ano ang pang-estado na pagbabago?

Ang Spark streaming ay gumagamit ng isang arkitekturang micro batch kung saan ang papasok na data ay naka-grupo sa mga micro batch na tinatawag na Discretized Streams (DStreams) na nagsisilbi ring pangunahing abstraction ng programa. Ang panloob na DStreams ay mayroong Matatag na Ibinahagi na Mga Datasets (RDD) at bilang isang resulta ng karaniwang pamantayang RDD na mga pagbabago at pagkilos na maaaring magawa.



Sa streaming kung mayroon kaming isang case ng paggamit upang subaybayan ang data sa mga batch pagkatapos ay kailangan namin ng mga DStream na kumpleto sa estado.

Halimbawa maaari naming subaybayan ang pakikipag-ugnayan ng isang gumagamit sa isang website sa panahon ng session ng gumagamit o maaari naming subaybayan ang isang partikular na hashtag sa twitter sa buong oras at makita kung aling mga gumagamit sa buong mundo ang nagsasalita tungkol dito.

Mga uri ng ganap na pagbabago ng estado.



Ang DStreams ng estado ay may dalawang uri - pagsubaybay batay sa window at buong pagsubaybay sa session.

Para sa estado na pagsubaybay sa lahat ng papasok na data ay dapat na ibahin sa mga pares na key-halaga na tulad ng ang mga pangunahing estado ay maaaring subaybayan sa mga batch. Ito ay isang precondition.

Dagdag dito dapat din nating paganahin ang checkpointing, isang konsepto na tatalakayin natin sa mga susunod na blog.

> Pagsubaybay batay sa window

Sa pagsubaybay batay sa window ang mga papasok na batch ay naka-grupo sa mga agwat ng oras, ibig sabihin, mga pangkat na pangkat bawat 'x' segundo. Ang karagdagang mga pagkalkula sa mga batch na ito ay ginagawa gamit ang mga slide interval.

Halimbawa kung ang window interval = 3 sec at slide interval = 2 sec, pagkatapos ang lahat ng papasok na data ay maipapangkat sa mga batch bawat 3 segundo at ang mga pagkalkula sa mga batch na ito ay mangyayari bawat 2 segundo. Bilang kahalili maaari nating sabihin, gumawa ng mga pagkalkula bawat 2 segundo sa mga batch na dumating sa huling 3 segundo.

spark-streaming-dstream-window

Sa diagram sa itaas nakikita natin na ang mga papasok na batch ay naka-grupo bawat 3 yunit ng oras (window interval) at ang mga pagkalkula ay ginagawa tuwing 2 yunit ng oras (slide interval).
Tandaan: Hindi tulad ng Apache Flink, ang Apache Spark ay walang konsepto ng pag-tumbling window, lahat ng mga bintana ay dumadulas.

APOY

Ang isang tanyag na API para sa pagbabago batay sa window ay

PairDStreamFunction.reduceByKeyAndWindow .

Mayroong maraming mga overload na bersyon ng API na ito, tingnan natin ang isa na mayroong pinakamaraming bilang ng mga parameter. Matapos ang paliwanag na ito ang natitirang mga labis na karga na bersyon ng API na ito ay dapat na nagpapaliwanag sa sarili.

Nagbabalik: Ang nabago na DStream [(K, V)]

bawasanFunc : Ang nauugnay bawasan ang pagpapaandar.

invReduceFunc : Ang kabaligtaran ng nasa itaas ay nagbabawas ng pagpapaandar. Kinakailangan ito para sa mahusay na computing ng mga papasok at papalabas na batch. Sa tulong ng pagpapaandar na ito ang halaga ng mga batch na papalabas ay ibabawas mula sa naipon na halaga ng nabawas na pag-andar. Halimbawa, kung kinukalkula namin ang kabuuan ng mga papasok na halaga para sa kani-kanilang mga key sa gayon para sa mga papalabas na batch ay ibabawas namin ang mga halaga para sa kani-kanilang mga key (sa kondisyon na naroroon ito sa kasalukuyang batch na hindi papansinin).

windowDuration : Mga yunit ng oras para sa pagpapangkat ng mga batch, dapat itong isang maramihang pagitan ng batch.

slideDuration : Mga yunit ng oras para sa pagkalkula, dapat itong isang maramihang pagitan ng batch. mga partisyon : Ang partisyoner na gagamitin para sa pag-iimbak ng nagresultang DStream. Para sa karagdagang impormasyon sa pagbabasa ng pagkahati ito .

filterFunc : Pag-andar upang ma-filter ang nag-expire na mga pares na key-halaga, ibig sabihin halimbawa kung hindi kami nakakakuha ng isang pag-update para sa isang susi para sa anumang oras na nais naming alisin ito.

Narito ang programa upang mabilang ang mga salitang nagmumula sa isang socket stream. Ginamit namin ang isang overloaded na bersyon ng pag-andar sa itaas na may agwat ng window na 4 sec at isang slide interval na 2 sec.

Sa aking susunod na blog ay susulat ako tungkol sa buong pagsubaybay sa session at pag-checkpoint.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.

Mga Kaugnay na Post:

kung paano magdagdag ng java sa landas

Ipinamahagi ang Caching sa Mga Variable ng Broadcast