Oversigt over gniststadier
Et trin i en udførelsesproces er kun et niveau, gennem hvilket hver af opgaverne skal passere. Hele gnistjobbet er opdelt i mange faser for effektiv behandling af data. Hver opgave udføres i en separat partition.
Hver gang en ansøgning om gnistjob indsendes til Spark af brugeren, accepterer Spark-driveren den og identificerer de forskellige slags handlinger / transformationer, der findes i applikationen. Disse operationer vil endvidere blive arrangeret i et flowdiagram kaldet DAG. En DAG (Directed Acyclic Graph) oprettes, når der kaldes en handling eller en transformation på RDD, som igen kalder DAGScheduler.
Betydningen af DAG er som følger:
- Retning: Alle noder er forbundet til hinanden og skaber en acyklisk graf. Sekvensen af dette bestemmes af de handlinger, der kaldes på RDD.
- Acyclic: Knudepunkterne er ikke forbundet som en cyklisk sløjfe, dvs. hvis en handling eller en transformation først blev udført, kan ikke vendes tilbage til dens oprindelige værdi.
- Graf: Hele mønsteret dannet af kanter og knudepunkter arrangeret sammen i et specifikt mønster kaldes en graf. Lodrette er intet andet end RDD'erne og kanterne er handlingerne, der kaldes på RDD'et.
DAGScheduler er den, der opdeler stadierne i et antal opgaver. DAGScheduler videregiver derefter faseinformationen til cluster manager (YARN / Spark standalone), der udløser opgaveplanlæggeren til at køre opgaverne. Gnistdriver konverterer den logiske plan til en fysisk udførelsesplan. Gnistjob udføres i pipelining-metoden, hvor alle transformeringsopgaver kombineres til et enkelt trin.
Transformations
Der er 2 slags transformationer, der finder sted:
1. Smalle transformationer : Dette er transformationer, der ikke kræver blanding. Disse handlinger kan udføres i et enkelt trin.
Eksempel: kort () og filter ()
2. Brede transformationer : Dette er transformationer, der kræver blanding på tværs af forskellige partitioner. Derfor kræver det, at der oprettes forskellige stadier til kommunikation på tværs af forskellige partitioner.
Eksempel: ReduceByKey
Lad os tage et eksempel for en bedre forståelse af, hvordan dette fungerer.
Eksempel: I dette eksempel vil vi se, hvordan en enkel ordtælling fungerer ved hjælp af 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 udføres en textFile-operation for at læse den givne inputtekstfil fra HDFS-placeringen.
- data.flatMap (_. split (”“)). kort (i => (i, 1)). reducerByKey (_ + _). indsamle
Resultat: res21: Array ((streng, int)) = matrix ()
Derefter udføres en flatMap-operation for at opdele linjerne i hele inputfilen i forskellige ord. Derefter udføres en kortoperation for at danne (nøgle, værdi) par som (ord, 1) for hvert af ordene. Og reduktionByKey-funktionen kaldes for at finde summen af tællinger for hvert ord. Endelig giver den kollektive handling slutresultatet ved at indsamle alle data.
I løbet af dette program oprettes 2 trin af Spark, fordi der udføres en transformation her. Mens transformationsoperationen er udført, skal shuffling udføres, fordi dataene skal blandes mellem 2 eller flere forskellige partitioner. Derfor oprettes en fase, og derefter oprettes endnu en enkelt fase til transformationsopgaven.
Også internt vil disse faser blive opdelt i opgaver. I dette eksempel er hvert trin opdelt i 2 opgaver, da der er 2 partitioner, der findes. Hver partition kører en individuel opgave.
Typer af gniststadier
Her er de to typer gnistfaser nedenfor
1. ShuffleMapStage
Dette er dybest set et mellemstadium i processen med DAG-udførelse. Outputet fra dette trin bruges som input til yderligere trin (er). Outputet fra dette er i form af kortoutputfiler, som senere kan bruges ved at reducere opgaven. En ShuffleMapStage betragtes som klar, når alle kortoutput er tilgængelige. Undertiden mangler outputplaceringer i tilfælde, hvor partitionerne enten går tabt eller ikke er tilgængelige.
Dette trin kan indeholde mange rørledningsoperationer såsom kort () og filter () inden udførelse af blanding. Interne registers outputLocks og _numAvailableOutputs bruges af ShuffleMapStage til at spore antallet af shuffle map-output. En enkelt ShuffleMapStage kan ofte bruges på tværs af forskellige job.
2. ResultatStage
Som navnet i sig selv antyder, er dette den sidste fase i et gnistjob, der udfører en operation på en eller flere partitioner i en RDD for at beregne dens resultat. Initialisering af interne registre og tællere udføres af ResultStage.
DAGScheduler indsender eventuelle manglende opgaver til ResultatStage til beregning. Til beregning kræver det forskellige obligatoriske parametre såsom stageId, stageAttempId, sendevariablen for den serialiserede opgave, partition, foretrukne TaskLocations, outputId, nogle lokale egenskaber, TaskMetrics for det pågældende trin. Nogle af de krævede valgfrie parametre er Job-id, applikations-id og applikationsforsøg-id.
Fordele ved gnistfaser
Nedenfor er de forskellige fordele ved gnistfaser:
1. Dynamisk tildeling af eksekutører
Ved at se Spark Job Event-tidslinjen kan vi se, at tildelingen af eksekutører foregår dynamisk. Dette betyder, at eksekutorerne kaldes fra klyngen afhængigt af arbejdsbyrden i løbet af opgaven. Det frigives derefter tilbage til klyngen, så snart det er gjort. Dette gemmer ressourceallokationshukommelsen og giver de andre applikationer, der kører i den samme klynge, mulighed for at genbruge eksekvererne. Derfor vil den samlede klyngebrug udvides og være optimal.
2. Cache
RDD'er cacheres under de operationer, der udføres på dem på hvert trin, og gemmes i hukommelsen. Dette er nyttigt til at spare computertid, når slutresultatet kræver, at de samme RDD'er læses igen fra HDFS.
3. Parallel udførelse
Gnistopgaver, der er uafhængige af hinanden, udføres parallelt, medmindre og indtil der kræves en blanding, eller input af et trin er afhængig af dets tidligere output.
4. DAG-visualisering
Dette er meget nyttigt i tilfælde af komplekse beregninger, hvor en masse operationer og deres afhængighed er involveret. Når man ser denne DAG-visualisering, kan man nemt spore flowet og identificere ydeevneblokeringer. Man kan også se hver af de opgaver, der køres af hvert trin, ved at klikke på de trin, der er vist i denne visualisering. I denne udvidede visning vises alle detaljerne i de RDD'er, der hører til dette trin.
5. Fejltolerance
På grund af cacheoperationen, der udføres på RDD'er, vil DAG have en registrering af hver handling udført på dem. Antag derfor, at en RDD under alle omstændigheder går tabt, det kan let hentes ved hjælp af DAG. Cluster manager kan bruges til at identificere den partition, hvor den blev mistet, og den samme RDD kan placeres igen ved den samme partition til gendannelse af datatab.
På grund af de ovennævnte fordele bruges Apache Spark i vid udstrækning i stedet for det tidligere anvendte MapReduce. Gniststadier er intet andet end en udvidet version af MapReduce. Da MapReduce krævede, at dataene skulle læses fra og skrives til HDFS flere gange, blev Spark introduceret, der udfører disse handlinger i sin hukommelse.
Konklusion
Derfor kan vi konkludere, at gniststadier er mere effektive på grund af deres in-memory beregning, øget behandlingshastighed selv til iterativ behandling.
Anbefalede artikler
Dette er en guide til gnistfaser. Her diskuterer vi typer af transformation og typer og fordele ved gniststadier. Du kan også se på de følgende artikler for at lære mere -
- Sådan installeres gnist
- Gnist streaming
- Karriere i gnist
- Spark Interview Spørgsmål
- Oversigt og top 6 komponenter af gnist