Odnośnie Jak kontekst iskry odczytuje kod użytkownika i przekształca go w zadania?
Kod kierowcy generuje zadanie, etapy i zadania.
Cały kod sterownika można wywołać jako jedną aplikację, a każde działanie stanowi zadanie.
Po przesłaniu pracy do kierowcy zadanie jest podzielone na plan logiczny i plan fizyczny.
Podczas planu logicznego transformacje() budują obliczenia chanin serii RDD. Ponieważ każda akcja() wyzwala zadanie, podczas planu fizycznego cały wykres zależności transformacji jest podzielony na etapy. W przeciwieństwie do hadoop, w którym proces wykonania jest ustalony map-shuffle-sort-aggregate, iskra nie ma stałego procesu wykonywania. Dane są obliczane, gdy są rzeczywiście potrzebne w sposób przepływowy. Rozpoczyna się od końcowego wyniku RDD i sprawdza wstecz łańcuch RDD, aby znaleźć, jakie RDD i parytruty są potrzebne do obliczenia końcowego wyniku. Podczas cofania, jeśli napotka na ShuffleDependency, odcina przepływ danych i tworzy nowy etap pozostawiając chaos RDD przez NarrowDepedency. Tak więc ShuffleDependency, która wybucha na nowy etap.
W każdym z etapów zadania są realizowane, a dane są przesyłane przez transformacje. Liczba zadań jest równa liczbie partycji w RDD na każdym etapie.
Wszystkie zadania są spakowane w TaskSet i wysłane do TaskScheduler. Aktor Driver wysyła zserializowane zadania do CoarseGrainedExecutorBackend Actor na węźle roboczym. Po otrzymaniu, executor deserializuje go do normalnego zadania i uruchamia, aby uzyskać wynik. TaskScheduler zostanie powiadomiony, że zadanie zostało zakończone, a jego wynik zostanie przetworzony
Jeśli otrzymane zadanie na sterowniku jest ostatnim zadaniem na scenie, to zostanie przesłany następny etap. Jeśli etap jest już ostatni, dagScheduler zostanie poinformowany, że zadanie zostało zakończone.
Od wersji iskry 1.4 nowa wizualizacja jest dodawana w interfejsie Spark. Gdzie możemy zobaczyć wizualizację DAG różnych etapów.