Apache Spark DStream (Discretized Streams)
Blijf op de hoogte van de laatste technologische trends
Deel DataFlair op Telegram!!
Doel
Deze Spark-tutorial leidt je door de Apache Spark DStream. Allereerst zullen we zien wat Spark Streaming is, en daarna, wat DStream is in Apache Spark. Gediscretiseerde Stream operaties, d.w.z. Stateless en Stateful Transformations, Output operatie, Input DStream, en ontvangers worden ook besproken in deze Apache Spark blog.
Apache Spark DStream (Gediscretiseerde Streams)
Inleiding tot DStream in Apache Spark
In dit gedeelte zullen we leren over DStream. Wat zijn de rol en de verantwoordelijkheid ervan in Spark Streaming? Het omvat wat alle methoden zijn inculcated om te gaan met live streaming van data.
Als een uitbreiding op Apache Spark API, Spark Streaming is fouttolerant, hoge doorvoer systeem. Het verwerkt de live stroom van gegevens. Spark Streaming neemt input van verschillende betrouwbare input bronnen zoals Flume, HDFS, en Kafka etc. en stuurt dan de verwerkte data naar filesystemen, database of live dashboards. De input datastroom wordt verdeeld in de batches van gegevens en genereert vervolgens de uiteindelijke stroom van het resultaat in batches.
Spark DStream (Discretized Stream) is de basis abstractie van Spark Streaming. DStream is een continue stroom van gegevens. Het ontvangt input van verschillende bronnen zoals Kafka, Flume, Kinesis, of TCP sockets. Het kan ook een data stroom zijn die gegenereerd wordt door de input stroom te transformeren. In de kern is DStream een continue stroom van RDD (Spark abstractie). Elke RDD in DStream bevat data van een bepaald interval.
Elke bewerking op een DStream geldt voor alle onderliggende RDDs. DStream dekt alle details. Het biedt de ontwikkelaar een high-level API voor het gemak. Het resultaat is dat Spark DStream het werken met streaming data vergemakkelijkt.
Spark Streaming biedt fouttolerantie-eigenschappen voor DStreams als die voor RDDs. Zolang er een kopie van de invoergegevens beschikbaar is, kan het elke toestand daaruit herberekenen met behulp van de lineage van de RDDs. Standaard repliceert Spark data op twee nodes. Hierdoor kan Spark Streaming uitval van een enkele werker verdragen.
Apache Spark DStream Operations
Net als RDD, ondersteunt Spark DStream ook twee soorten Operations: Transformaties en Uitvoerbewerkingen
i. Transformatie
Er zijn twee soorten transformatie in DStream:
- Stateless Transformations
- Stateful Transformations
a. Stateless Transformations
De verwerking van elke batch is niet afhankelijk van de gegevens van eerdere batches. Stateloze transformaties zijn eenvoudige RDD-transformaties. Het is van toepassing op elke batch, dat wil zeggen elke RDD in een DStream. Het omvat veel voorkomende RDD transformaties zoals map(), filter(), reduceByKey() etc.
Hoewel het lijkt alsof deze functies van toepassing zijn op de hele stroom, is elke DStream een verzameling van vele RDDs (batches). Als gevolg daarvan is elke stateless transformatie van toepassing op elke RDD.
Stateless transformaties zijn in staat om data van vele DStreams te combineren binnen elke tijdstap. Bijvoorbeeld, key/value DStreams hebben dezelfde join-gerelateerde transformaties als RDDs – cogroup(), join(), leftOuterJoin() etc.
We kunnen deze operaties op DStreams gebruiken om onderliggende RDD operaties uit te voeren op elke batch.
Als stateless transformaties onvoldoende zijn, DStreams komt met een geavanceerde operator genaamd transform(). transform() staat operaties toe op de RDDs binnen hen. Met transform() kan elke willekeurige RDD-naar-RDD functie op de DStream werken. Deze functie wordt aangeroepen op elke batch van data in de stroom om een nieuwe stroom te produceren.
b. Stateful Transformations
Het gebruikt gegevens of tussenresultaten van vorige batches en berekent het resultaat van de huidige batch. Stateful transformations zijn bewerkingen op DStreams die gegevens in de tijd volgen. Het maakt dus gebruik van sommige gegevens uit vorige batches om de resultaten voor een nieuwe batch te genereren.
De twee belangrijkste typen zijn windowed operaties, die handelen over een glijdend venster van tijdsperioden, en updateStateByKey(), die wordt gebruikt om de status te volgen over gebeurtenissen voor elke sleutel (bijvoorbeeld om een object op te bouwen dat elke gebruikerssessie vertegenwoordigt).
Volg deze link om DStream Transformaties in detail te lezen met de voorbeelden.
ii. Output Operation
Als we eenmaal de data hebben na transformatie, worden op die data output operaties uitgevoerd in Spark Streaming. Na het debuggen van ons programma, kunnen we met behulp van de output operatie alleen onze output opslaan. Sommige van de output operaties zijn print(), save() etc.. De save operatie neemt een directory om het bestand in op te slaan en een optioneel achtervoegsel. De print() neemt de eerste 10 elementen van elke batch van de DStream en drukt het resultaat af.
Input DStreams en Receivers
Input DStream is een DStream die de stroom van invoergegevens van streaming bron vertegenwoordigt. Receiver (Scala doc, Java doc) object geassocieerd met elk input DStream object. Het ontvangt de data van een bron en slaat het op in Spark’s geheugen voor verwerking.
Spark Streaming biedt twee categorieën van ingebouwde streaming bronnen:
- Basic bronnen – Dit zijn bronnen die direct beschikbaar zijn in de StreamingContext API. Voorbeelden: bestandssystemen, en socket-verbindingen.
- Geavanceerde bronnen – Deze bronnen zijn beschikbaar door extra utility classes zoals Kafka, Flume, Kinesis. Dus, vereist koppelen tegen extra afhankelijkheden.
Bijvoorbeeld:
- Kafka: het artefact vereist voor Kafka is spark-streaming-kafka-0-8_2.11.
- Flume: het benodigde artefact voor Flume is dspark-streaming-flume_2.11.
- Kinesis: het voor Kinesis benodigde artefact is spark-streaming-kinesis-asl_2.11.
Het creëert vele ingangen DStream om meerdere stromen van gegevens in parallel te ontvangen. Het creëert meerdere ontvangers die veel datastromen ontvangen. Spark worker/executor is een langlopende taak. Dus, neemt een van de kernen die associëren met Spark Streaming toepassing. Het is dus noodzakelijk dat de Spark Streaming applicatie genoeg cores heeft om de ontvangen data te verwerken.
Conclusie
In conclusie, net als RDD in Spark, biedt Spark Streaming een abstractie op hoog niveau, bekend als DStream. DStream vertegenwoordigt een continue stroom van gegevens. Intern, is DStream portret als een opeenvolging van RDDs. Dus, net als RDD, kunnen we DStream verkrijgen uit input DStream zoals Kafka, Flume enz. Ook kan de transformatie worden toegepast op de bestaande DStream om een nieuwe DStream te krijgen.