Apache Spark DStream (Discretized Streams)
Pysy ajan tasalla uusimmista teknologiatrendeistä
Join DataFlair on Telegram!!
Tavoite
Tässä Spark-oppaassa käydään läpi Apache Spark DStream. Ensin katsotaan, mikä on Spark Streaming, sitten, mikä on DStream Apache Sparkissa. Discretized Stream Operations eli Stateless ja Stateful Transformations, Output operation, Input DStream, and Receivers are also discussed in this Apache Spark blog.
Apache Spark DStream (Discretized Streams)
Introduction to DStream in Apache Spark
Tässä osiossa, opimme DStreamista. Mikä on sen rooli, ja vastuu Spark Streamingissa? Siihen sisältyy, mitä kaikkia menetelmiä on otettu käyttöön datan suoran suoratoiston käsittelemiseksi.
Apache Spark API:n laajennuksena Spark Streaming on vikasietoinen, korkean läpimenon järjestelmä. Se käsittelee suoraa tietovirtaa. Spark Streaming ottaa syötteitä erilaisista luotettavista syötelähteistä, kuten Flume, HDFS ja Kafka jne., ja lähettää sitten käsitellyt tiedot tiedostojärjestelmiin, tietokantaan tai live-kojelautoihin. Syötetty tietovirta jaetaan datan eriin, minkä jälkeen se tuottaa lopullisen tuloksen virran erissä.
Spark DStream (Discretized Stream) on Spark Streamingin perusabstraktio. DStream on jatkuva tietovirta. Se vastaanottaa syötettä eri lähteistä, kuten Kafkasta, Flumesta, Kinesiksestä tai TCP-socketeista. Se voi olla myös tietovirta, joka luodaan muuntamalla syötevirta. Pohjimmiltaan DStream on jatkuva RDD-tietovirta (Spark-abstraktio). Jokainen DStreamin RDD sisältää dataa tietyltä aikaväliltä.
Mikä tahansa DStreamiin kohdistuva operaatio koskee kaikkia sen taustalla olevia RDD:itä. DStream kattaa kaikki yksityiskohdat. Se tarjoaa kehittäjälle korkean tason API:n mukavuutta varten. Tämän seurauksena Spark DStream helpottaa työskentelyä suoratoistodatan kanssa.
Spark Streaming tarjoaa DStreameille vikasietoisuusominaisuuksia kuten RDD:illekin.Niin kauan kuin syötetystä datasta on saatavilla kopio, se voi laskea siitä minkä tahansa tilan uudelleen käyttäen RDD:iden lineagea. Oletusarvoisesti Spark replikoi tiedot kahteen solmuun. Tämän seurauksena Spark Streaming kestää yhden työntekijän vikatilanteet.
Apache Spark DStream Operations
Kuten RDD, myös Spark DStream tukee kahdenlaisia operaatioita: Transformations ja output Operations-
i. Transformaatiot
DStreamissa on kahdenlaisia transformaatioita:
- Stateless Transformations
- Stateful Transformations
a. Stateless Transformations
Kunkin erän käsittely ei ole riippuvainen edellisten erien tiedoista. Tilattomat muunnokset ovat yksinkertaisia RDD-muunnoksia. Sitä sovelletaan jokaiseen erään, joka tarkoittaa jokaista RDD:tä DStreamissa. Se sisältää yleisiä RDD-muunnoksia, kuten map(), filter(), reduceByKey() jne.
Vaikka nämä funktiot näyttävätkin soveltuvan koko virtaan, jokainen DStream on kokoelma monia RDD:itä (eriä). Tämän seurauksena jokainen tilaton muunnos koskee jokaista RDD:tä.
Tilattomat muunnokset pystyvät yhdistämään monien DStreamin tietoja kussakin aika-askeleessa. Esimerkiksi avain/arvo DStreamsilla on samat yhdistämiseen liittyvät muunnokset kuin RDD:llä – cogroup(), join(), leftOuterJoin() jne.
Voidaan käyttää näitä operaatioita DStreameille suorittaaksemme taustalla olevia RDD-operaatioita kullekin erälle.
Jos tilattomat muunnokset eivät riitä, DStreamsilla on edistynyt operaattori, jonka nimi on transform()-operaattori. transform()-operaattorin avulla voidaan operoida niissä oleville RDD:ille. Transform() sallii minkä tahansa mielivaltaisen RDD-RDD:stä-RDD:hen -toiminnon toimimisen DStreamiin. Tätä funktiota kutsutaan jokaiselle streamissa olevalle dataerälle uuden stream-tiedon tuottamiseksi.
b. Stateful Transformations
Se käyttää edellisten erien tietoja tai välituloksia ja laskee nykyisen erän tuloksen. Stateful-muunnokset ovat DStreamin operaatioita, jotka seuraavat dataa ajassa. Se siis hyödyntää joitain aiempien erien tietoja tuottaakseen uuden erän tulokset.
Kahta päätyyppiä ovat ikkunoidut operaatiot, jotka toimivat liukuvassa aikajaksojen ikkunassa, ja updateStateByKey(), jota käytetään seuraamaan tilaa tapahtumien yli kunkin avaimen kohdalla (esim. kutakin käyttäjäistuntoa edustavan objektin rakentamiseen).
Tämän linkin kautta pääset lukemaan DStream-muunnokset yksityiskohtaisesti esimerkkien avulla.
ii. Lähtöoperaatio
Kun saamme datan muunnoksen jälkeen, sille suoritetaan Spark Streamingissa lähtöoperaatio. Ohjelmamme debuggauksen jälkeen, käyttämällä output-operaatiota voimme vain tallentaa tulostuksemme. Joitakin tulostusoperaatioita ovat esimerkiksi print() ja save(). Save-operaatio vaatii hakemiston, johon tiedosto tallennetaan, ja valinnaisen loppuliitteen. Print() ottaa DStreamin jokaisesta erästä 10 ensimmäistä elementtiä ja tulostaa tuloksen.
Syöttö-DStreamit ja vastaanottimet
Syöttö-DStream on DStream, joka edustaa virtalähteestä tulevaa syötetietovirtaa. Vastaanotin (Scala doc, Java doc) objekti, joka liittyy jokaiseen input DStream -objektiin. Se vastaanottaa datan lähteestä ja tallentaa sen Sparkin muistiin käsiteltäväksi.
Spark Streaming tarjoaa kaksi luokkaa sisäänrakennettuja suoratoistolähteitä:
- Peruslähteet – Nämä ovat lähde, joka on suoraan käytettävissä StreamingContext API:ssa. Esimerkkejä: tiedostojärjestelmät ja socket-yhteydet.
- Edistyneet lähteet – Nämä lähteet ovat käytettävissä ylimääräisten apuohjelmaluokkien kuten Kafka, Flume, Kinesis avulla. Vaatii siis linkittämistä ylimääräisiä riippuvuuksia vastaan.
Esimerkiksi:
- Kafka: Kafkan vaatima artefakti on spark-streaming-kafka-0-8_2.11.
- Flume: Flumea varten tarvittava artefakti on dspark-streaming-flume_2.11.
- Kinesis: Kinesisiin vaadittava artefakti on spark-streaming-kinesis-asl_2.11.
Se luo monta sisääntuloa DStreamia useiden tietovirtojen vastaanottamiseksi rinnakkain. Se luo useita vastaanottimia, jotka vastaanottavat monia tietovirtoja. Spark worker/executor on pitkäkestoinen tehtävä. Siten se vie yhden ytimistä, jotka liittyvät Spark Streaming -sovellukseen. On siis välttämätöntä, että Spark Streaming -sovelluksella on riittävästi ytimiä vastaanotetun datan käsittelyyn.
Johtopäätös
Johtopäätöksenä voidaan todeta, että Spark Streaming tarjoaa Sparkin RDD:n tapaan korkean tason abstraktion, joka tunnetaan nimellä DStream. DStream edustaa jatkuvaa tietovirtaa. Sisäisesti DStream kuvataan RDD:iden sarjana. RDD:n tavoin voimme siis saada DStreamin tulo-DStreamista, kuten Kafka, Flume jne. Myös muunnosta voidaan soveltaa olemassa olevaan DStreamiin uuden DStreamin saamiseksi.