Översikt över gniststadier

Ett steg i en exekveringsprocess är inget annat än en nivå genom vilken var och en av uppgifterna måste passera. Hela gnistjobbet är indelat i många steg för effektiv behandling av data. Varje uppgift utförs i en separat partition.

Varje gång en gnistjobbansökan skickas till Spark av användaren, accepterar Spark-drivrutinen den och identifierar de olika typerna av åtgärder / transformationer som finns i applikationen. Vidare kommer dessa operationer att arrangeras i ett flödesschema som kallas DAG. En DAG (Directed Acyclic Graph) skapas varje gång en åtgärd eller en transformation kallas på RDD som i sin tur kallar DAGScheduler.

Betydelsen av DAG är som följer:

  • Riktad: Alla noder är anslutna till varandra för att skapa en acyklisk graf. Sekvensen för detta bestäms av de åtgärder som anropas på RDD.
  • Acyclic: Noderna är inte anslutna som en cyklisk slinga, dvs om en åtgärd eller en omvandling en gång gjordes kan inte återställas till sitt ursprungliga värde.
  • Diagram: Hela mönstret som bildas av kanterna och topparna ordnade tillsammans i ett specifikt mönster kallas en graf. Vertikaler är inget annat än RDD: erna och kanterna är de åtgärder som kallas på RDD.

DAGScheduler är den som delar upp stadierna i ett antal uppgifter. DAGScheduler överför sedan sceninformationen till klusterhanteraren (YARN / Spark fristående) som utlöser uppgiften schemaläggaren att köra uppgifterna. Gnistdrivrutin konverterar den logiska planen till en fysisk exekveringsplan. Gnistjobb utförs i rörledningsmetoden där alla transformationsuppgifter kombineras till ett enda steg.

transformationer

Det finns två typer av transformationer som sker:

1. Smala transformationer : Dessa är transformationer som inte kräver blandningsprocessen. Dessa åtgärder kan utföras i ett enda steg.

Exempel: karta () och filter ()

2. Breda transformationer : Det här är transformationer som kräver blandning mellan olika partitioner. Därför krävs det att olika stadier skapas för kommunikation över olika partitioner.

Exempel: ReduceByKey

Låt oss ta ett exempel för en bättre förståelse av hur detta fungerar.

Exempel: I det här exemplet ser vi hur en enkel ordräkning fungerar med Spark DAGScheduler.

  • val data = sc.textFile (“data.txt”)

Resultat: data: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) på textFil vid: 24

Först utförs en textFil-operation för att läsa den givna inmatade textfilen från HDFS-platsen.

  • data.flatMap (_. split (”“)). karta (i => (i, 1)). reduceraByKey (_ + _). samla

Resultat: res21: Array ((String, Int)) = Array ()

Därefter utförs en plattMap-operation för att dela raderna i hela inputfilen i olika ord. Sedan görs en kartoperation för att bilda (nyckel, värde) par som (ord, 1) för vart och ett av orden. Och reduktionByKey-funktionen kallas för att hitta summan av räkningar för varje ord. Slutligen ger den kollektiva åtgärden slutresultatet genom att samla in alla uppgifter.

Under detta program skapas 2 steg av Spark eftersom en omvandling utförs här. Medan transformationsoperationen är klar måste shuffling utföras eftersom uppgifterna måste blandas mellan två eller flera olika partitioner. Därför skapas ett steg och sedan skapas ytterligare ett steg för transformationsuppgiften.

Internt kommer dessa steg att delas upp i uppgifter. I det här exemplet är varje steg uppdelat i två uppgifter eftersom det finns två partitioner som finns. Varje partition kör en individuell uppgift.

Typer av gniststadier

Här är de två typerna av gniststadier som anges nedan

1. ShuffleMapStage

Detta är i princip ett mellansteg i processen för DAG-exekvering. Utgången från detta steg används som ingång för ytterligare steg. Utgången från detta är i form av kartoutputfiler som senare kan användas genom att minska uppgiften. En ShuffleMapStage anses redo när alla kartoutgångar är tillgängliga. Ibland kan utmatningsplatserna saknas i fall där partitionerna antingen går förlorade eller inte är tillgängliga.

Det här steget kan innehålla många rörledningsåtgärder såsom karta () och filter () före utförandet av blandningen. Interna registerutgångarLokaler och _numAvailableOutputs används av ShuffleMapStage för att spåra antalet shuffle map-utgångar. En enda ShuffleMapStage kan vanligtvis användas i olika jobb.

2. ResultatStage

Som namnet självt antyder är detta det sista steget i ett gnistjobb som utför en operation på en eller flera partitioner i en RDD för att beräkna dess resultat. Initialisering av interna register och räknare görs av ResultStage.

DAGScheduler skickar in saknade uppgifter om några till ResultatStage för beräkning. För beräkning kräver det olika obligatoriska parametrar såsom stageId, stageAttempId, sändningsvariabeln för den serialiserade uppgiften, partition, föredragna TaskLocations, outputId, några lokala egenskaper, TaskMetrics för det specifika scenen. Några av de valfria parametrarna som krävs är Jobb-id, applikations-id och applikations-försök-id.

Fördelar med gniststadier

Nedan är de olika fördelarna med gniststadier:

1. Dynamisk allokering av exekutörer

Genom att se tidslinjen för Spark Job Event kan vi se att tilldelningen av exekutörer görs dynamiskt. Detta innebär att exekutörerna kallas från klustret beroende på arbetsbelastningen under utförandet av uppgiften. Den släpps sedan tillbaka till klustret så snart jobbet är gjort. Detta sparar resursallokeringsminnet och gör det möjligt för andra applikationer som körs i samma kluster att återanvända exekutorerna. Därför kommer det övergripande klusteranvändningen att öka och vara optimalt.

2. Cache

RDD: er cachas under operationerna som utförs på dem i varje steg och lagras i minnet. Detta är till hjälp för att spara beräkningstid när slutresultatet kräver att samma RDD: er läses igen från HDFS.

3. Parallell körning

Gnistjobb som är oberoende av varandra körs parallellt såvida inte och tills det krävs en blandning eller ingången till ett steg är beroende av dess tidigare utgång.

4. DAG-visualisering

Detta är mycket användbart i fall av komplexa beräkningar där många operationer och deras beroenden är inblandade. Ser man denna DAG-visualisering kan man enkelt spåra flödet och identifiera prestandablockeringarna. Man kan också se var och en av de uppgifter som körs av varje steg genom att klicka på de steg som visas i denna visualisering. I den utvidgade vyn visas alla detaljer om RDD: er som tillhör detta steg.

5. Feltolerans

På grund av cachningsoperationen som utförs på RDD: er kommer DAG att ha en post av varje åtgärd som utförs på dem. Anta därför att i alla fall en RDD går förlorad, det kan lätt hämtas med hjälp av DAG. Cluster manager kan användas för att identifiera den partition där den förlorades och samma RDD kan placeras igen vid samma partition för återställning av dataförlust.

På grund av ovan nämnda fördelar används Apache Spark i stor utsträckning istället för det tidigare använda MapReduce. Gniststadier är inget annat än en utökad version av MapReduce. Eftersom MapReduce krävde att data skulle läsas från och skrivas till HDFS flera gånger, introducerades Spark som gör dessa åtgärder i sitt minne.

Slutsats

Därför kan vi dra slutsatsen att gnistfas är mer effektiva på grund av deras beräkning i minnet, ökad bearbetningshastighet även för iterativ behandling.

Rekommenderade artiklar

Detta är en guide till gniststadier. Här diskuterar vi typer av transformationer och typer och fördelar med gniststadier. Du kan också titta på följande artiklar för att lära dig mer -

  1. Hur man installerar gnista
  2. Spark Streaming
  3. Karriär i Spark
  4. Sparkintervjufrågor
  5. Översikt och topp 6 komponenter av gnista

Kategori: