Přehled jiskrových fází
Fáze provádění procesu není nic jiného než úroveň, kterou musí projít všechny úkoly. Celá jiskra je rozdělena do mnoha fází pro efektivní zpracování dat. Každá úloha se provádí v samostatném oddílu.
Kdykoli uživatel podá do aplikace Spark úlohu Spark, ovladač Spark ji přijme a identifikuje různé druhy akcí / transformací přítomných v aplikaci. Dále budou tyto operace uspořádány do vývojového diagramu nazvaného DAG. DAG (Directed Acyclic Graph) je vytvořen vždy, když je na RDD vyvolána akce nebo transformace, která zase volá DAGScheduler.
Význam DAG je následující:
- Směrováno: Všechny uzly jsou vzájemně propojeny a vytvářejí acyklický graf. Jejich posloupnost je určena akcemi zvanými na RDD.
- Acyklické: Uzly nejsou propojeny jako cyklická smyčka, tj. Pokud byla akce nebo transformace jednou provedena, nelze vrátit zpět na původní hodnotu.
- Graf: Celý vzor tvořený hranami a vrcholy uspořádanými dohromady v určitém vzoru se nazývá graf. Vrcholy nejsou nic jiného než RDD a hrany jsou akce nazývané na RDD.
DAGScheduler je ten, který rozděluje fáze do několika úkolů. DAGScheduler poté předá informace o fázi správci klastru (samostatný YARN / Spark), který spustí plánovač úloh pro spuštění úkolů. Ovladač jiskry převede logický plán na fyzický plán provedení. Sparkové úlohy jsou prováděny metodou pipelining, kde jsou všechny transformační úkoly sloučeny do jedné fáze.
Transformace
Probíhají 2 druhy transformací:
1. Úzké transformace : Jedná se o transformace, které nevyžadují proces míchání. Tyto akce lze provést v jedné fázi.
Příklad: map () a filter ()
2. Široké transformace : Jedná se o transformace, které vyžadují zamíchání napříč různými oddíly. Vyžaduje tedy vytvoření různých fází pro komunikaci napříč různými oddíly.
Příklad: ReduceByKey
Vezměme si příklad pro lepší pochopení toho, jak to funguje.
Příklad: V tomto příkladu uvidíme, jak jednoduché počítání slov funguje pomocí Spark DAGScheduler.
- val data = sc.textFile („data.txt“)
Výsledek: data: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) v textFile v: 24
Nejprve se provede operace textFile ke čtení daného vstupního textového souboru z umístění HDFS.
- data.flatMap (_. split (”“)). map (i => (i, 1)). reduByKey (_ + _).
Výsledek: res21: Array ((String, Int)) = Array ()
Dále je provedena operace flatMap pro rozdělení řádků v celém vstupním souboru na různá slova. Poté se provede mapová operace pro vytvoření (klíč, hodnota) párů jako (slovo, 1) pro každé ze slov. A funkce reduByKey je volána k nalezení součtu počtů pro každé slovo. A konečně, kolektivní akce poskytne konečný výsledek shromážděním všech údajů.
Během tohoto programu vytvoří Spark 2 fáze, protože zde probíhá transformace. Když je operace transformace hotová, je třeba provést míchání, protože data musí být zamíchána mezi 2 nebo více různými oddíly. Proto se vytvoří fáze a poté se vytvoří další jediná fáze pro transformační úlohu.
Interně budou tyto fáze rozděleny do úkolů. V tomto příkladu je každá fáze rozdělena na 2 úkoly, protože existují 2 oddíly. Každý oddíl spustí samostatnou úlohu.
Typy jiskrových fází
Níže jsou uvedeny dva typy fází jisker
1. ShuffleMapStage
V zásadě jde o mezistupeň v procesu provádění DAG. Výstup této fáze se používá jako vstup pro další fázi. Výstupem je soubor výstupních mapových souborů, které lze později použít snížením úlohy. ShuffleMapStage je považován za připravený, když jsou k dispozici všechny jeho mapové výstupy. Někdy mohou výstupní místa chybět v případech, kdy jsou oddíly ztraceny nebo nejsou dostupné.
Tato fáze může obsahovat mnoho operací potrubí, jako jsou map () a filter () před provedením míchání. Vnitřní registry outputLocs a _numAvailableOutputs používá ShuffleMapStage ke sledování počtu výstupů mapy shuffle. Jeden ShuffleMapStage lze běžně používat napříč různými úlohami.
2. ResultStage
Jak sám název napovídá, jedná se o poslední fázi úlohy Spark, která provádí operaci na jedné nebo více oddílech RDD pro výpočet jejího výsledku. Inicializaci interních registrů a čítačů provádí ResultStage.
DAGScheduler odešle chybějící úkoly, pokud existují, do ResultStage pro výpočet. Pro výpočet vyžaduje různé povinné parametry, jako je stageId, stageAttempId, proměnná broadcast serializované úlohy, oddíl, upřednostňované úlohyLocations, outputId, některé místní vlastnosti, TaskMetrics dané konkrétní fáze. Některé z požadovaných volitelných parametrů jsou ID úlohy, ID aplikace a ID pokusu o aplikaci.
Výhody jisker
Níže jsou uvedeny různé výhody Spark Stages:
1. Dynamická alokace exekutorů
Při pohledu na časovou osu události Spark Job vidíme, že přidělování exekutorů se provádí dynamicky. To znamená, že vykonavatelé jsou voláni z klastru v závislosti na pracovní zátěži během provádění úkolu. Poté je uvolněn zpět do klastru, jakmile je dokončena jeho práce. Tím se ušetří paměť přidělení prostředků a umožní ostatním aplikacím spuštěným ve stejném klastru znovu použít spouštěče. Proto se celkové využití clusteru zvýší a bude optimální.
2. Ukládání do mezipaměti
RDD jsou ukládány do mezipaměti během operací prováděných na nich v každé fázi a ukládány do paměti. To je užitečné při úspoře výpočetního času, kdy konečný výsledek vyžaduje, aby byly stejné disky RDD znovu načteny z HDFS.
3. Paralelní provedení
Jiskrové úlohy, které jsou na sobě nezávislé, jsou prováděny paralelně, pokud a dokud není vyžadováno zamíchání nebo vstup jedné fáze není závislý na předchozím výstupu.
4. Vizualizace DAG
To je velmi užitečné v případech složitých výpočtů, kde je zahrnuto mnoho operací a jejich závislostí. Když vidíme tuto vizualizaci DAG, lze snadno sledovat tok a identifikovat blokování výkonu. Kliknutím na fáze zobrazené v této vizualizaci můžete také vidět každou z úloh spuštěných v každé fázi. V tomto rozšířeném pohledu jsou zobrazeny všechny podrobnosti o RDD, které patří do této fáze.
5. Odolnost proti poruchám
Kvůli operaci ukládání do mezipaměti prováděné na RDD bude mít DAG záznam o každé akci provedené na nich. Předpokládejme tedy, že v každém případě dojde ke ztrátě RDD, lze ji snadno získat pomocí DAG. Správce clusteru lze použít k identifikaci oddílu, ve kterém byl ztracen, a stejný RDD může být znovu umístěn do stejného oddílu pro obnovení ztráty dat.
Vzhledem k výše uvedeným výhodám je Apache Spark široce používán místo dříve používaných MapReduce. Jiskrové fáze nejsou ničím jiným než rozšířenou verzí MapReduce. Protože MapReduce vyžadoval, aby byla data čtena a zapisována do HDFS vícekrát, byl představen Spark, který tyto akce provádí ve své paměti.
Závěr
Můžeme tedy dojít k závěru, že fáze Spark jsou efektivnější kvůli jejich výpočtu v paměti, zvýšené rychlosti zpracování i pro iterativní zpracování.
Doporučené články
Toto je průvodce Spark Stage. Zde diskutujeme typy transformace a typy a výhody jiskrových fází. Další informace naleznete také v následujících článcích -
- Jak nainstalovat Spark
- Spark Streaming
- Kariéra ve hře Spark
- Spark Otázky k rozhovoru
- Přehled a 6 hlavních komponent jiskry