Apache Spark DStream (Discretized Streams)
Maradj naprakész a legújabb technológiai trendekkel
Join DataFlair on Telegram!!
Cél
Ez a Spark bemutató, végigvezet az Apache Spark DStream-en. Először is megnézzük, mi az a Spark Streaming, majd azt, hogy mi a DStream az Apache Sparkban. A diszkrét stream műveletek, azaz a stateless és stateful transzformációk, a kimeneti művelet, a bemeneti DStream és a vevők is szóba kerülnek ebben az Apache Spark blogban.
Apache Spark DStream (diszkrét streamek)
Bevezetés a DStream-be az Apache Sparkban
Ebben a részben a DStream-et fogjuk megismerni. Mi a szerepe, és felelőssége a Spark Streamingben? Tartalmazza, hogy milyen összes módszer van beépítve az adatok élő adatfolyamának kezelésére.
A Spark Streaming az Apache Spark API kiterjesztéseként hibatűrő, nagy áteresztőképességű rendszer. Feldolgozza az élő adatfolyamot. A Spark Streaming különböző megbízható bemeneti forrásokból, például Flume, HDFS és Kafka stb. veszi a bemenetet, majd a feldolgozott adatokat fájlrendszerekbe, adatbázisba vagy élő műszerfalakra küldi. A bemeneti adatfolyamot kötegekre osztja, majd kötegenként generálja az eredményt tartalmazó végső adatfolyamot.
A Spark DStream (Discretized Stream) a Spark Streaming alapvető absztrakciója. A DStream egy folyamatos adatfolyam. Különböző forrásokból, például Kafkából, Flume-ból, Kinesisből vagy TCP-csatlakozókból kap bemenetet. Lehet a bemeneti folyam átalakításával létrehozott adatfolyam is. Alapjában véve a DStream egy folyamatos RDD adatfolyam (Spark absztrakció). A DStream minden RDD-je az adott intervallum adatait tartalmazza.
A DStream-en végzett bármely művelet az összes alapul szolgáló RDD-re vonatkozik. A DStream minden részletre kiterjed. A fejlesztő számára egy magas szintű API-t biztosít a kényelem érdekében. Ennek eredményeképpen a Spark DStream megkönnyíti a streaming adatokkal való munkát.
A Spark Streaming a DStreamek számára ugyanolyan hibatűrő tulajdonságokat kínál, mint az RDD-k számára. amíg a bemeneti adatok egy példánya rendelkezésre áll, addig az RDD-k vonalának felhasználásával bármilyen állapotot újra tud számolni belőle. Alapértelmezés szerint a Spark két csomóponton replikálja az adatokat. Ennek eredményeként a Spark Streaming elviseli az egyetlen munkás hibáit.
Apache Spark DStream műveletek
Az RDD-hez hasonlóan a Spark DStream is kétféle műveletet támogat: Transzformációkat és kimeneti műveleteket-
i. Transzformáció
A DStreamben kétféle transzformáció létezik:
- Stateless Transformations
- Stateful Transformations
a. Állapot nélküli transzformációk
Az egyes tételek feldolgozása nem függ az előző tételek adataitól. A stateless transzformációk egyszerű RDD transzformációk. Minden kötegre vonatkozik, ami minden RDD-t jelent egy DStreamben. Ide tartoznak az olyan gyakori RDD-transzformációk, mint a map(), filter(), reduceByKey() stb.
Noha ezek a funkciók úgy tűnnek, mintha az egész adatfolyamra vonatkoznának, minden DStream sok RDD (batch) gyűjteménye. Ennek eredményeképpen minden állapotmentes transzformáció minden egyes RDD-re vonatkozik.
Az állapotmentes transzformációk képesek kombinálni az adatokat sok DStream-ből az egyes időlépéseken belül. Például a kulcs/érték DStreams ugyanazokkal az egyesítéssel kapcsolatos transzformációkkal rendelkezik, mint az RDD-k – cogroup(), join(), leftOuterJoin() stb.
A DStreams-en ezeket a műveleteket arra használhatjuk, hogy az egyes tételeken alapul szolgáló RDD műveleteket hajtsunk végre.
Ha a stateless transzformációk nem elegendőek, a DStreams rendelkezik egy fejlett operátorral, a transform()-val. a transform() lehetővé teszi a bennük lévő RDD-ken való operációt. A transform() lehetővé teszi, hogy bármilyen tetszőleges RDD-ről-RDD-re függvény működjön a DStream-en. Ezt a függvényt a streamben lévő minden egyes adathalmazon meghívja, hogy egy új streamet hozzon létre.
b. Állapotfüggő transzformációk
A korábbi tételek adatait vagy közbenső eredményeit használja, és kiszámítja az aktuális tétel eredményét. Az állapotfüggő transzformációk olyan műveletek a DStreamen, amelyek az adatokat időben követik. Így felhasználja a korábbi tételek bizonyos adatait egy új tétel eredményeinek létrehozásához.
A két fő típus az ablakos műveletek, amelyek egy csúszó időablakon keresztül hatnak, és az updateStateByKey(), amely az egyes kulcsok eseményein keresztül követi az állapotot (pl. az egyes felhasználói munkameneteket reprezentáló objektum felépítéséhez).
A DStream transzformációk részletesebb olvasásához kövesse ezt a linket a példákkal együtt.
ii. Kimeneti művelet
Mihelyt megkapjuk az adatokat az átalakítás után, az adatokon kimeneti műveletet hajtunk végre a Spark Streamingben. A programunk hibakeresése után, a kimeneti művelet segítségével tudjuk csak elmenteni a kimenetünket. A kimeneti műveletek közül néhány a print(), save() stb. A save művelet a fájl mentéséhez könyvtárat és egy opcionális utótagot vesz fel. A print() a DStream minden egyes kötegéből az első 10 elemet veszi be, és kiírja az eredményt.
Bemeneti DStreamek és vevők
A bemeneti DStream egy DStream, amely a streaming forrásból származó bemeneti adatfolyamot reprezentálja. Minden bemeneti DStream objektumhoz tartozó Receiver (Scala doc, Java doc) objektum. Fogadja az adatokat egy forrásból, és a Spark memóriájában tárolja azokat feldolgozásra.
A Spark Streaming a beépített streaming források két kategóriáját biztosítja:
- Alapforrások – Ezek olyan források, amelyek közvetlenül elérhetőek a StreamingContext API-ban. Példák: fájlrendszerek, és socket kapcsolatok.
- Advanced Sources – Ezek a források extra segédosztályok által elérhetőek, mint például Kafka, Flume, Kinesis. Így megköveteli az extra függőségek elleni linkelést.
Például:
- Kafka: A Kafkához szükséges artifact a spark-streaming-kafka-0-8_2.11.
- Flume: a Flume-hoz szükséges artifact a dspark-streaming-flume_2.11.
- Kinesis: A Kinesishez szükséges artifact a spark-streaming-kinesis-asl_2.11.
Ez sok bemenetű DStream-et hoz létre, hogy párhuzamosan több adatfolyamot fogadjon. Több vevőt hoz létre, amelyek sok adatfolyamot fogadnak. A Spark worker/executor egy hosszan futó feladat. Így elfoglalja az egyik magot, amely a Spark Streaming alkalmazáshoz kapcsolódik. Ezért szükséges, hogy a Spark Streaming alkalmazás elegendő maggal rendelkezzen a fogadott adatok feldolgozásához.
Következtetés
Összefoglalva, akárcsak az RDD a Sparkban, a Spark Streaming is biztosít egy DStream nevű magas szintű absztrakciót. A DStream egy folyamatos adatfolyamot reprezentál. A DStream belsőleg RDD-k sorozataként ábrázolódik. Így az RDD-hez hasonlóan DStream-et kaphatunk a bemeneti DStream-ből, mint például a Kafka, Flume stb. Emellett a transzformáció alkalmazható a meglévő DStream-re is, hogy új DStream-et kapjunk.