Oversikt over gnistfaser
Et stadium i en utførelsesprosess er ikke annet enn et nivå som hver av oppgavene må gjennom. Hele gnistjobben er delt inn i mange stadier for effektiv behandling av data. Hver oppgave utføres i en egen partisjon.
Hver gang en gnistjobbsøknad sendes til Spark av brukeren, godtar Spark-driveren den og identifiserer de forskjellige typer handlinger / transformasjoner som er tilstede i applikasjonen. Videre vil disse operasjonene bli arrangert i et flytskjema kalt DAG. En DAG (Directed Acyclic Graph) opprettes når en handling eller en transformasjon kalles på RDD som igjen kaller DAGScheduler.
Betydningen av DAG er som følger:
- Retning: Alle nodene er koblet til hverandre og lager en syklisk graf. Sekvensen av dette bestemmes av handlingene som blir kalt på RDD.
- Acyclic: Knutepunktene er ikke koblet som en syklisk sløyfe, dvs. hvis en handling eller en transformasjon en gang ble gjort, kan ikke tilbakeføres til den opprinnelige verdien.
- Graf: Hele mønsteret dannet av kantene og toppunktene som er ordnet sammen i et spesifikt mønster kalles en graf. Vertikater er ikke annet enn RDD-ene og kantene er handlingene som kalles RDD-en.
DAGScheduler er den som deler etappene inn i en rekke oppgaver. DAGScheduler overfører deretter trinninformasjonen til klyngebestyreren (YARN / Spark standalone) som utløser oppgaveplanleggeren til å kjøre oppgavene. Gnistdriver konverterer den logiske planen til en fysisk utførelsesplan. Gnistjobber utføres i rørledningsmetoden der alle transformasjonsoppgavene kombineres til et enkelt trinn.
trans~~POS=TRUNC
Det er to typer transformasjoner som finner sted:
1. Smale transformasjoner : Dette er transformasjoner som ikke krever prosess av stokking. Disse handlingene kan utføres i et enkelt trinn.
Eksempel: kart () og filter ()
2. Brede transformasjoner : Dette er transformasjoner som krever blanding av forskjellige partisjoner. Derfor krever det at forskjellige stadier opprettes for kommunikasjon på tvers av forskjellige partisjoner.
Eksempel: ReduceByKey
La oss ta et eksempel for en bedre forståelse av hvordan dette fungerer.
Eksempel: I dette eksemplet vil vi se hvordan en enkel ordtelling fungerer ved å bruke Spark DAGScheduler.
- val data = sc.textFile (“data.txt”)
Resultat: data: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) på textFile kl: 24
Først utføres en textFile-operasjon for å lese den gitte inndatatekstfilen fra HDFS-plasseringen.
- data.flatMap (_. split (”“)). kart (i => (i, 1)). reduserByKey (_ + _). samle
Resultat: res21: Array ((String, Int)) = Array ()
Deretter utføres en flatMap-operasjon for å dele linjene i hele inndatafilen i forskjellige ord. Deretter gjøres en kartoperasjon for å danne (nøkkel, verdi) par som (ord, 1) for hvert av ordene. Og reduksjonsfunksjonen kalles for å finne summen av teller for hvert ord. Til slutt vil den kollektive handlingen gi sluttresultatet ved å samle alle dataene.
I løpet av dette programmet lages 2 trinn av Spark fordi en transformasjon utføres her. Mens transformasjonsoperasjonen er utført, må shuffling utføres fordi dataene må blandes mellom to eller flere forskjellige partisjoner. Derfor opprettes et stadium og deretter opprettes et enda enkelt stadie for transformasjonsoppgaven.
Også internt vil disse stadiene deles inn i oppgaver. I dette eksemplet er hvert trinn delt inn i to oppgaver siden det er 2 partisjoner som finnes. Hver partisjon kjører en individuell oppgave.
Typer gnistfaser
Her er de to typene gnistfaser gitt nedenfor
1. ShuffleMapStage
Dette er i utgangspunktet et mellomtrinn i prosessen med DAG-utførelse. Utgangen fra dette trinnet brukes som input for videre trinn (er). Utdataene fra dette er i form av kartutgangsfiler som senere kan brukes ved å redusere oppgaven. En ShuffleMapStage anses som klar når alle kartutgangene er tilgjengelige. Noen ganger kan utgangsposisjonene mangle i tilfeller der partisjonene enten går tapt eller ikke er tilgjengelige.
Dette trinnet kan inneholde mange rørledningsoperasjoner som kart () og filter () før utførelse av stokking. Interne registerutgangslokaler og _numAvailableOutputs brukes av ShuffleMapStage til å spore antall shuffle-kartutganger. En enkelt ShuffleMapStage kan brukes ofte på tvers av forskjellige jobber.
2. ResultatStage
Som navnet selv antyder, er dette sluttfasen i en gnistjobb som utfører en operasjon på en eller flere partisjoner i en RDD for å beregne resultatet. Initialisering av interne registre og tellere utføres av ResultatStage.
DAGScheduler sender inn eventuelle manglende oppgaver til ResultatStage for beregning. For beregning krever det forskjellige obligatoriske parametere som stageId, stageAttempId, kringkastingsvariabelen for den serialiserte oppgaven, partisjon, foretrukne TaskLocations, outputId, noen lokale egenskaper, TaskMetrics for det aktuelle trinnet. Noen av de valgfrie parametrene som kreves er Jobb-ID, Søknads-ID og Søknads-ID.
Fordeler med gnistfaser
Nedenfor er de forskjellige fordelene med Spark Stages:
1. Dynamisk tildeling av eksekutører
Ved å se tidslinjen for Spark Job Event, kan vi se at tildelingen av utførere gjøres dynamisk. Dette betyr at eksekutorene blir kalt fra klyngen avhengig av arbeidsmengden under utførelsen av oppgaven. Den slippes deretter tilbake til klyngen så snart jobben er gjort. Dette sparer ressursallokeringsminnet og lar de andre applikasjonene som kjører i den samme klyngen bruke gjenoppretterne. Derfor vil den samlede klyngebruken øke og være optimal.
2. Bufring
RDD-er blir bufret under operasjonene som blir utført på dem på hvert trinn og lagret i minnet. Dette er nyttig for å spare beregningstid når sluttresultatet krever at de samme RDD-ene blir lest igjen fra HDFS.
3. Parallell utførelse
Gnistjobber som er uavhengige av hverandre, utføres parallelt med mindre og til det kreves en stokking eller inngangen til ett trinn er avhengig av den forrige utgaven.
4. DAG-visualisering
Dette er veldig nyttig i tilfeller av komplekse beregninger der mange operasjoner og deres avhengigheter er involvert. Ser man denne DAG-visualiseringen, kan man enkelt spore flyten og identifisere ytelsesblokkeringene. Du kan også se hver av oppgavene som kjøres av hvert trinn ved å klikke på trinnene som er vist i denne visualiseringen. I denne utvidede visningen vises alle detaljene om RDD-ene som tilhører dette stadiet.
5. Feiltoleranse
På grunn av cacheoperasjonen som blir utført på RDD, vil DAG ha en oversikt over hver handling utført på dem. Anta at i alle fall en RDD går tapt, det kan lett hentes ved hjelp av DAG. Cluster manager kan brukes til å identifisere partisjonen der den gikk tapt, og den samme RDD kan plasseres igjen på samme partisjon for utvinning av tap av data.
På grunn av de ovennevnte fordelene blir Apache Spark mye brukt i stedet for det tidligere brukte MapReduce. Gnistetapper er ikke annet enn en utvidet versjon av MapReduce. Siden MapReduce krevde at dataene skulle leses fra og skrives til HDFS flere ganger, ble Spark introdusert som gjør disse handlingene i minnet.
Konklusjon
Derfor kan vi konkludere med at gnisttrinnene er mer effektive på grunn av deres beregning i minnet, økt behandlingshastighet selv for iterativ prosessering.
Anbefalte artikler
Dette er en guide til gnistfaser. Her diskuterer vi typer transformasjon og typer og fordeler med gnistfaser. Du kan også se på følgende artikler for å lære mer -
- Hvordan installere gnist
- Gniststrømming
- Karriere i Spark
- Spark Interview Questions
- Oversikt og Topp 6 komponenter av gnist