Etapy iskier - Poznaj rodzaje i zalety etapów Spark

Spisie treści:

Anonim

Przegląd etapów Spark

Etap w procesie wykonania jest niczym innym jak poziomem, przez który każde zadanie musi przejść. Całe zadanie Spark jest podzielone na wiele etapów w celu wydajnego przetwarzania danych. Każde zadanie jest wykonywane na osobnej partycji.

Ilekroć użytkownik przesyła aplikację Spark do Spark, sterownik Spark akceptuje ją i identyfikuje różne rodzaje działań / transformacji obecnych w aplikacji. Ponadto operacje te zostaną ułożone w schemat blokowy zwany DAG. DAG (Directed Acyclic Graph) jest tworzony za każdym razem, gdy wywoływana jest akcja lub transformacja na RDD, która z kolei wywołuje DAGScheduler.

Znaczenie DAG jest następujące:

  • Reżyseria: Wszystkie węzły są ze sobą połączone, tworząc wykres acykliczny. Kolejność tych czynności zależy od akcji wywoływanych na RDD.
  • Acyclic: Węzły nie są połączone jako pętla cykliczna, tzn. Jeśli raz wykonano akcję lub transformację, nie można przywrócić jej pierwotnej wartości.
  • Wykres: Cały wzór utworzony przez krawędzie i wierzchołki ułożone razem w określony wzór nazywa się wykresem. Wierzchołki są niczym innym jak RDD, a krawędzie są akcjami wywoływanymi na RDD.

DAGScheduler to taki, który dzieli etapy na szereg zadań. DAGScheduler następnie przekazuje informacje o etapie do menedżera klastra (samodzielny YARN / Spark), który uruchamia harmonogram zadań w celu uruchomienia zadań. Sterownik Spark konwertuje plan logiczny na fizyczny plan wykonania. Zadania Spark są wykonywane metodą potokową, w której wszystkie zadania transformacji są łączone w jeden etap.

Transformacje

Istnieją 2 rodzaje transformacji, które mają miejsce:

1. Wąskie transformacje : są to transformacje, które nie wymagają tasowania. Działania te można wykonać w jednym etapie.

Przykład: map () i filter ()

2. Szerokie transformacje : są to transformacje, które wymagają przetasowania między różnymi partycjami. Dlatego wymaga utworzenia różnych etapów komunikacji między różnymi partycjami.

Przykład: ReduceByKey

Weźmy przykład dla lepszego zrozumienia, jak to działa.

Przykład: w tym przykładzie zobaczymy, jak działa prosta liczba słów przy użyciu Spark DAGScheduler.

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

Wynik: dane: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) w pliku tekstowym o: 24

Najpierw wykonywana jest operacja textFile w celu odczytania podanego wejściowego pliku tekstowego z lokalizacji HDFS.

  • data.flatMap (_. split (”„)). map (i => (i, 1)). zmniejszByKey (_ + _). zbierz

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

Następnie wykonywana jest operacja flatMap w celu podzielenia linii w całym pliku wejściowym na różne słowa. Następnie wykonywana jest operacja mapowania w celu utworzenia par (klucz, wartość), takich jak (słowo, 1) dla każdego słowa. Wywoływana jest także funkcja zmniejszaniaByKey, aby znaleźć sumę zliczeń dla każdego słowa. Wreszcie wspólne działanie da wynik końcowy poprzez zebranie wszystkich danych.

Podczas tego programu Spark tworzy 2 etapy, ponieważ tutaj wykonywana jest transformacja. Podczas operacji transformacji należy wykonać tasowanie, ponieważ dane muszą być tasowane między 2 lub więcej różnymi partycjami. W związku z tym tworzony jest etap, a następnie tworzony jest kolejny pojedynczy etap zadania transformacji.

Również wewnętrznie te etapy zostaną podzielone na zadania. W tym przykładzie każdy etap jest podzielony na 2 zadania, ponieważ istnieją 2 partycje. Każda partycja uruchamia indywidualne zadanie.

Rodzaje etapów iskrzenia

Oto dwa typy etapów iskier podane poniżej

1. ShuffleMapStage

Jest to zasadniczo etap pośredni w procesie wykonywania DAG. Dane wyjściowe tego stopnia są wykorzystywane jako dane wejściowe dla dalszych etapów. Dane wyjściowe mają postać plików wyjściowych map, które można później wykorzystać, zmniejszając zadanie. ShuffleMapStage uważa się za gotowy, gdy dostępne są wszystkie dane wyjściowe mapy. Czasami może brakować lokalizacji wyjściowych w przypadkach, gdy partycje są zagubione lub niedostępne.

Ten etap może zawierać wiele operacji potokowych, takich jak map () i filter () przed wykonaniem tasowania. Rejestry wewnętrzne outputLocs i _numAvailableOutputs są używane przez ShuffleMapStage do śledzenia liczby wyników map losowych. Pojedyncza ShuffleMapStage może być powszechnie używana w różnych zadaniach.

2. ResultStage

Jak sama nazwa wskazuje, jest to ostatni etap zadania Spark, który wykonuje operację na jednej lub kilku partycjach RDD w celu obliczenia jej wyniku. Inicjalizacja rejestrów wewnętrznych i liczników odbywa się przez ResultStage.

DAGScheduler przesyła brakujące zadania, jeśli takie występują, do ResultStage w celu obliczenia. Do obliczeń wymaga różnych obowiązkowych parametrów, takich jak stageId, stageAttempId, zmienna rozgłoszeniowa serializowanego zadania, partycja, preferowane TaskLocations, outputId, niektóre właściwości lokalne, TaskMetrics tego konkretnego etapu. Niektóre wymagane parametry opcjonalne to identyfikator zadania, identyfikator aplikacji i identyfikator próby aplikacji.

Zalety etapów Spark

Poniżej przedstawiamy różne zalety etapów Spark:

1. Dynamiczny przydział wykonawców

Widząc oś czasu zdarzenia Spark Job, możemy zobaczyć, że alokacja wykonawców odbywa się dynamicznie. Oznacza to, że wykonawcy są wywoływani z klastra w zależności od obciążenia podczas wykonywania zadania. Jest on następnie zwalniany z powrotem do klastra, gdy tylko jego zadanie zostanie wykonane. Oszczędza to pamięć alokacji zasobów i pozwala innym aplikacjom działającym w tym samym klastrze na ponowne użycie programów wykonawczych. W związku z tym ogólne wykorzystanie klastrów wzrośnie i będzie optymalne.

2. Buforowanie

RDD są buforowane podczas operacji wykonywanych na nich na każdym etapie i przechowywane w pamięci. Jest to pomocne w oszczędzaniu czasu obliczeniowego, gdy wynik końcowy wymaga ponownego odczytania tych samych RDD z HDFS.

3. Wykonanie równoległe

Zadania Spark, które są od siebie niezależne, są wykonywane równolegle, chyba że wymagane jest tasowanie lub wejście jednego stopnia zależy od jego poprzedniej mocy wyjściowej.

4. Wizualizacja DAG

Jest to bardzo pomocne w przypadkach złożonych obliczeń, w których bierze udział wiele operacji i ich zależności. Widząc tę ​​wizualizację DAG, można łatwo prześledzić przepływ i zidentyfikować blokady wydajności. Każde z zadań uruchamianych przez każdy etap można zobaczyć, klikając etapy pokazane na tej wizualizacji. W tym rozszerzonym widoku pokazane są wszystkie szczegóły RDD, które należą do tego etapu.

5. Tolerancja na uszkodzenia

Z powodu operacji buforowania wykonywanej na RDD, DAG będzie miał zapis każdej wykonanej na nich akcji. Dlatego załóżmy, że w każdym przypadku RDD zostanie utracone, można je łatwo odzyskać za pomocą DAG. Menedżera klastra można użyć do zidentyfikowania partycji, na której została utracona, a ten sam RDD można ponownie umieścić na tej samej partycji w celu odzyskania utraty danych.

Ze względu na wyżej wymienione zalety, Apache Spark jest szeroko stosowany zamiast poprzednio używanego MapReduce. Etapy Spark to nic innego jak rozszerzona wersja MapReduce. Ponieważ MapReduce wymagało wielokrotnego odczytu i zapisu danych na HDFS, wprowadzono Spark, który wykonuje te czynności w swojej pamięci.

Wniosek

Dlatego możemy stwierdzić, że stopnie Spark są bardziej wydajne ze względu na ich obliczenia w pamięci, zwiększoną szybkość przetwarzania nawet w przypadku przetwarzania iteracyjnego.

Polecane artykuły

To jest przewodnik po etapach Spark. Tutaj omawiamy rodzaje transformacji oraz typy i zalety etapów iskrzenia. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej -

  1. Jak zainstalować Spark
  2. Spark Streaming
  3. Kariera w Spark
  4. Pytania do wywiadu Spark
  5. Przegląd i 6 najważniejszych komponentów Spark