Prezentare generală a etapelor Spark
O etapă dintr-un proces de execuție nu este altceva decât un nivel prin care fiecare dintre sarcini trebuie să treacă. Întreaga lucrare prin scânteie este împărțită în mai multe etape pentru prelucrarea eficientă a datelor. Fiecare sarcină este executată într-o partiție separată.
Ori de câte ori utilizatorul depune o cerere de lucru cu scânteie, Spark driverul o acceptă și identifică diferitele tipuri de acțiuni / transformări prezente în aplicație. În plus, aceste operațiuni vor fi aranjate într-o diagramă de flux numită DAG. Un DAG (Grafic aciclic direcționat) este creat de fiecare dată când o acțiune sau o transformare este apelată la RDD care, la rândul său, apelează DAGScheduler.
Semnificația DAG este următoarea:
- Direcționat: Toate nodurile sunt conectate unele cu altele creând un grafic aciclic. Secvența acestora este determinată de acțiunile apelate la RDD.
- Acyclic: Nodurile nu sunt conectate ca o buclă ciclică, adică dacă o acțiune sau o transformare a fost făcută odată nu poate fi readusă la valoarea sa inițială.
- Grafic: întregul model format de muchii și vârfuri dispuse împreună într-un model specific se numește grafic. Vârfurile nu sunt altceva decât RDD-urile și marginile sunt acțiunile apelate la RDD.
DAGScheduler este cel care împarte etapele într-un număr de sarcini. DAGScheduler transmite apoi informațiile de stadiu către managerul clusterului (standarone YARN / Spark) care declanșează programatorul de sarcini pentru a rula sarcinile. Spark driver convertește planul logic în plan de execuție fizică. Lucrările de scânteie sunt executate în metoda conductelor, unde toate sarcinile de transformare sunt combinate într-o singură etapă.
transformări
Există 2 tipuri de transformări care au loc:
1. Transformări înguste : sunt transformări care nu necesită procesul de amestecare. Aceste acțiuni pot fi executate într-o singură etapă.
Exemplu: hartă () și filtru ()
2. Transformări largi : sunt transformări care necesită amestecare în diferite partiții. Prin urmare, este necesar să fie create diferite etape pentru comunicare în diferite partiții.
Exemplu: ReduceByKey
Să luăm un exemplu pentru o mai bună înțelegere a modului în care funcționează acest lucru.
Exemplu: în acest exemplu, vom vedea cum funcționează un număr simplu de cuvinte folosind Spark DAGScheduler.
- val data = sc.textFile („data.txt”)
Rezultat: date: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) la textFile la: 24
În primul rând, se efectuează o operație textFile pentru a citi fișierul text de intrare dat din locația HDFS.
- data.flatMap (_. split ("")). map (i => (i, 1)). reduceByKey (_ + _). colecta
Rezultat: res21: Array ((String, Int)) = Array ()
În continuare, o operație flatMap este efectuată pentru a împărți liniile din întregul fișier de intrare în cuvinte diferite. Apoi, o operație de hartă se face pentru a forma (cheie, valoare) perechi precum (cuvânt, 1) pentru fiecare dintre cuvinte. Și funcția reduceByKey este chemată să găsească suma numărărilor pentru fiecare cuvânt. În cele din urmă, acțiunea colectivă va da rezultatul final prin colectarea tuturor datelor.
În timpul acestui program, Spark creează 2 etape, deoarece aici se realizează o transformare. În timp ce operația de transformare se face, amestecarea trebuie să fie efectuată, deoarece datele trebuie să fie amestecate între 2 sau mai multe partiții diferite. Prin urmare, pentru aceasta, se creează o etapă și apoi se creează o altă etapă unică pentru sarcina de transformare.
De asemenea, intern aceste etape vor fi împărțite în sarcini. În acest exemplu, fiecare etapă este împărțită în 2 sarcini, deoarece există 2 partiții. Fiecare partiție execută o sarcină individuală.
Tipuri de etape de scânteie
Iată cele două tipuri de scânteii prezentate mai jos
1. ShuffleMapStage
Aceasta este practic o etapă intermediară în procesul de execuție DAG. Ieșirea acestei etape este utilizată ca intrare pentru alte etape. Această ieșire este sub formă de fișiere de ieșire pe hartă, care pot fi utilizate ulterior prin reducerea activității. Un ShuffleMapStage este considerat gata atunci când sunt disponibile toate ieșirile hărții. Uneori, locațiile de ieșire pot lipsi în cazurile în care partițiile sunt fie pierdute, fie nu sunt disponibile.
Această etapă poate conține multe operațiuni de conducte, cum ar fi harta () și filtrul () înainte de executarea amestecării. ShuffleMapStage utilizează registrele interne outputLocs și _numAvailableOutputs pentru a urmări numărul de ieșiri ale hărții shuffle. Un singur ShuffleMapStage poate fi utilizat în mod obișnuit pe diverse joburi.
2. Rezultat Etapa
După cum sugerează și numele, aceasta este ultima etapă a unei lucrări Spark care efectuează o operație pe una sau mai multe partiții ale unui RDD pentru a calcula rezultatul acestuia. Inițializarea registrelor interne și a contoarelor se face de către ResultStage.
DAGScheduler trimite sarcini lipsă, dacă este cazul, la ResultStage pentru calcul. Pentru calcul, este nevoie de diverși parametri obligatorii, cum ar fi stageId, stageAttempId, variabila de difuzare a sarcinii serializate, partiție, TaskLocations preferate, outputId, unele proprietăți locale, TaskMetrics din acea etapă particulară. Unii dintre parametrii opționali necesari sunt ID-ul lucrării, ID-ul aplicației și ID-ul încercării de aplicare.
Avantajele etapelor de scânteie
Mai jos sunt prezentate diferitele avantaje ale Spark Stages:
1. Alocarea dinamică a executanților
Văzând cronologia evenimentului Spark Job, putem vedea că alocarea executanților se face dinamic. Aceasta înseamnă că executanții sunt chemați din cluster în funcție de volumul de lucru pe parcursul executării sarcinilor. Este apoi eliberat înapoi la cluster imediat ce lucrarea sa este terminată. Acest lucru salvează memoria de alocare a resurselor și permite celorlalte aplicații care rulează pe același cluster să refolosească executanții. Prin urmare, utilizarea generală a clusterului va crește și va fi optimă.
2. Cache
RDD-urile sunt memorate în cache în timpul operațiunilor efectuate pe ele pe fiecare etapă și sunt stocate în memorie. Acest lucru este util în economisirea timpului de calcul atunci când rezultatul final necesită citirea din nou a aceluiași RDD din HDFS.
3. Execuție paralelă
Lucrările de scânteie care sunt independente una de cealaltă sunt executate în paralel, cu excepția cazului în care, până când nu este necesar un amestec, sau intrarea unei etape depinde de producția anterioară.
4. vizualizare DAG
Acest lucru este foarte util în cazurile de calcule complexe în care sunt implicate o mulțime de operații și dependențele lor. Văzând această vizualizare DAG, se poate urmări cu ușurință fluxul și identifica blocajele de performanță. De asemenea, se pot vedea fiecare dintre sarcinile executate de fiecare etapă, făcând clic pe etapele prezentate în această vizualizare. În această vedere extinsă, sunt prezentate toate detaliile RDD care aparțin acestei etape.
5. Toleranță la erori
Datorită operațiunii de cache efectuată pe RDD, DAG va înregistra fiecare acțiune efectuată asupra lor. Prin urmare, să presupunem că, în orice caz, un RDD este pierdut, acesta poate fi ușor recuperat cu ajutorul DAG. Cluster Manager poate fi utilizat pentru a identifica partiția la care a fost pierdută și același RDD poate fi plasat din nou în aceeași partiție pentru recuperarea pierderilor de date.
Datorită beneficiilor menționate mai sus, Apache Spark este utilizat pe scară largă în locul MapReduce utilizat anterior. Etapele scânteiere nu sunt decât o versiune extinsă a MapReduce. Deoarece MapReduce a cerut citirea și scrierea datelor de mai multe ori pe HDFS, Spark a fost introdus care face aceste acțiuni în memoria sa.
Concluzie
Prin urmare, putem concluziona că etapele Spark sunt mai eficiente datorită calculării lor în memorie, creșterea vitezei de procesare chiar și pentru procesarea iterativă.
Articole recomandate
Acesta este un ghid pentru Spark Stages. Aici discutăm tipurile de transformare și tipurile și avantajele etapelor de scânteie. De asemenea, puteți arunca o privire la următoarele articole pentru a afla mai multe -
- Cum se instalează Spark
- Spark Streaming
- Cariera în Spark
- Întrebări la interviu Spark
- Prezentare generală și primele 6 componente ale Spark