2015-07-12 11 views
5

RDD przechodzi szereg transformacji z funkcjami/metodami zdefiniowanymi przez użytkownika w obiekcie. A funkcje te są przekazywane do executorów w postaci zadań. Te zadania są instancjami klasy Scala zdefiniowanymi w iskrowniku.W jaki sposób sterownik iskrowy serializuje zadanie wysyłane do executorów?

Zakładam, że funkcje/metody zdefiniowane przez użytkownika są zawijane w obiekcie zadania i przekazywane do executorów.

  1. jaki sposób wykonawcy wiedzieć jaka jest metoda, która musi być wykonana który jest owinięty w klasie zadanie?

  2. Jak dokładnie jest przydatna tutaj serializacja?

  3. W jaki sposób kontekst iskier odczytuje kod użytkownika i przekształca go w zadania?

Odpowiedz

0

Trochę wyjaśnić:

jaki sposób wykonawcy wiedzieć jaka jest metoda, która musi zostać wykonana, który jest owinięty w klasie zadanie?

Wykonawca otrzyma wiad RPC z opisem zadań, patrz poniżej

Jak dokładnie jest serializacji pomocny tutaj?

Tak, zadanie zawiera kod, który jest seryjny przez closureSerializer

Jak kontekst iskra odczytać kodu użytkownika i przekonwertować go do zadań?

W środowisku REPL iskra kompiluje kod użytkownika do plików klas i umieszcza na serwerze plików, executor implementuje niestandardowy program ładujący klasy, który ładuje klasę z serwera plików po stronie sterownika; klasa jest w rzeczywistości funkcją do uruchamiania z iteratorem rekordów

3

Funkcja iskier przechodząca zasadniczo opiera się na Java Serialization. W Javie możesz przekazać dowolny dowolny kod do innej maszyny za pośrednictwem sieci, może to być zwykła klasa przypadku lub dowolna klasa z dowolnym zachowaniem.

Tylko jedno wymaganie - klasa zserializowana musi znajdować się w ścieżce klas docelowej maszyny JVM.

Na starcie podczas korzystania spark-submit dystrybuuje plik jar wszystkim węzła pracownika Spark, pozwala kierowcy przechodzą funkcje odcinkach do węzła pracownika, a ponieważ w odcinkach klasa jest w ścieżce klasy dowolnej funkcji, które wysyłane ze sterownika można rozszeregować.

Program Spark nie definiuje żadnej konkretnej klasy Task dla transformacji RDD. Jeśli używasz go ze Scala do operacji map, wysyłasz serializowane wersje scala Function1.

Jeśli używasz agregacji/zmniejszenia według klucza itp., Może to być Function2. W każdym razie, nie jest to nic szczególnego dla Sparka, to po prostu klasa Scala (Java).

5

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.

Powiązane problemy