Преглед на искровите етапи

Етап в процеса на изпълнение не е нищо друго освен ниво, през което трябва да премине всяка една от задачите. Цялата искрова работа е разделена на много етапи за ефективна обработка на данни. Всяка задача се изпълнява в отделен дял.

Всеки път, когато заявлението за задание за искра се подаде на Spark от потребителя, драйверът Spark го приема и идентифицира различните видове действия / трансформации, налични в приложението. Освен това тези операции ще бъдат подредени в диаграма на потока, наречена DAG. DAG (насочена ациклична графика) се създава винаги, когато се извика действие или трансформация на RDD, което от своя страна извиква DAGScheduler.

Значението на DAG е следното:

  • Посочени : Всички възли са свързани помежду си, създавайки ациклична графика. Последователността на това се определя от действията, извикани в RDD.
  • Ацикличен: Възлите не са свързани като цикличен цикъл, т.е. ако едно действие или преобразуване веднъж извършено, не могат да бъдат върнати обратно към първоначалната си стойност.
  • Графика: Целият образец, образуван от ръбовете и върховете, подредени заедно в конкретен шаблон, се нарича графика. Върховете са нищо друго освен RDD, а ръбовете са действията, наречени на RDD.

DAGScheduler е този, който разделя етапите на няколко задачи. След това DAGScheduler предава информацията за етапа на мениджъра на клъстери (YARN / Spark самостоятелно), който задейства програмиста за планиране на задачи за изпълнение на задачите. Драйверът за искри преобразува логическия план във физически план за изпълнение. Искровите задачи се изпълняват по метода на тръбопровода, където всички задачи за трансформиране се комбинират в един етап.

трансформации

Съществуват два вида трансформации:

1. Тесни трансформации : Това са трансформации, които не изискват процеса на разбъркване. Тези действия могат да бъдат изпълнени на един етап.

Пример: карта () и филтър ()

2. Широки трансформации : Това са трансформации, които изискват разместване през различни дялове. Следователно е необходимо да се създадат различни етапи за комуникация през различни дялове.

Пример: ReduceByKey

Нека вземем пример за по-добро разбиране на това как работи.

Пример: В този пример ще видим как работи броя на прости думи, използвайки Spark DAGScheduler.

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

Резултат: данни: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) в textFile на: 24

Първо се извършва операция textFile за четене на дадения входен текстов файл от местоположението на HDFS.

  • data.flatMap (_. split (”“)). map (i => (i, 1)). ReduByKey (_ + _).

Резултат: res21: Array ((String, Int)) = Array ()

След това се извършва операция flatMap за разделяне на линиите в целия входен файл в различни думи. Тогава се извършва операция с карта, за да се образуват (ключ, стойност) двойки като (дума, 1) за всяка от думите. И функцията reduByKey се извиква, за да намери сумата на броя на всяка дума. И накрая, колективната акция ще даде краен резултат, като събере всички данни.

По време на тази програма от Spark се създават 2 етапа, защото тук се извършва трансформация. Докато операцията по трансформация се извършва, трябва да се извърши разбъркване, тъй като данните трябва да се разместват между 2 или повече различни дяла. Следователно за това се създава етап и след това се създава още един единствен етап за задачата за трансформация.

Също така вътрешно тези етапи ще бъдат разделени на задачи. В този пример всеки етап е разделен на 2 задачи, тъй като има 2 дяла, които съществуват. Всеки дял изпълнява индивидуална задача.

Видове искрови етапи

Ето двата вида искрови етапи, дадени по-долу

1. ShuffleMapStage

Това е основно междинен етап в процеса на изпълнение на DAG. Изходът от този етап се използва като вход за следващ етап (и). Резултатът от това е под формата на изходни файлове на картата, които могат да бъдат използвани по-късно чрез намаляване на задачата. ShuffleMapStage се счита за готов, когато всичките му изходи са налични. Понякога изходните местоположения могат да липсват в случаите, когато дяловете са загубени или не са достъпни.

Този етап може да съдържа много операции на тръбопровода, като map () и filter () преди изпълнението на разбъркване. Изходът на вътрешните регистриLocs и _numAvailableOutputs се използват от ShuffleMapStage за проследяване на броя на изхода на разбъркване на карта. Един ShuffleMapStage може да се използва често в различни задачи.

2. ResultStage

Както подсказва самото име, това е последният етап в работата на Spark, която извършва операция на един или повече дялове на RDD, за да изчисли резултата си. Инициализацията на вътрешните регистри и броячи се извършва от ResultStage.

DAGScheduler изпраща липсващи задачи, ако има такива, на ResultStage за изчисляване. За изчисляване се изискват различни задължителни параметри като stageId, stageAttempId, излъчващата променлива на сериализираната задача, дял, предпочитани TaskLocations, outputId, някои локални свойства, TaskMetrics от този конкретен етап. Някои от необходимите незадължителни параметри са Job Id, Id на приложението и ID на опит за приложение.

Предимства на искровите етапи

По-долу са различните предимства на Spark Stages:

1. Динамично разпределение на изпълнителите

Виждайки времевата линия на събитията Spark Job, можем да видим, че разпределението на изпълнителите се извършва динамично. Това означава, че изпълнителите се извикват от клъстера в зависимост от натовареността по време на изпълнение на задачата. След това се пуска обратно в клъстера, веднага щом работата му е свършена. Това спестява памет за разпределение на ресурси и позволява на другите приложения, работещи в същия клъстер, да използват повторно изпълнителите. Следователно цялостното използване на клъстерите ще се увеличи и ще бъде оптимално.

2. Кеширане

RDD се кешират по време на операциите, извършвани върху тях на всеки етап и се съхраняват в паметта. Това е полезно за спестяване на изчислително време, когато крайният резултат изисква същите RDD да бъдат прочетени отново от HDFS.

3. Паралелно изпълнение

Задачите на искрата, които са независими една от друга, се изпълняват паралелно, освен ако и докато не се изисква разбъркване или входът на един етап не зависи от предишния му изход.

4. DAG визуализация

Това е много полезно в случаите на сложни изчисления, в които участват много операции и техните зависимости. Виждайки тази DAG визуализация, лесно можете да проследите потока и да идентифицирате блокирането на производителността. Също така, можете да видите всяка от задачите, изпълнявани от всеки етап, като щракнете върху етапите, показани в тази визуализация. В този разгънат изглед са показани всички подробности за RDD, които принадлежат на този етап.

5. Поносимост на повреди

Поради кеширащата операция, извършена на RDD, DAG ще има запис на всяко действие, извършено върху тях. Следователно да предположим, че във всеки случай RDD е загубен, той може лесно да бъде извлечен с помощта на DAG. Мениджърът на клъстери може да се използва за идентифициране на дяла, в който е загубен и същият RDD може да бъде поставен отново в същия дял за възстановяване на загуба на данни.

Поради гореспоменатите предимства, Apache Spark се използва широко вместо предишно MapReduce. Искровите етапи не са нищо друго освен разширена версия на MapReduce. Тъй като MapReduce изискваше данните да бъдат прочетени и записани на HDFS многократно, беше въведена Spark, която прави тези действия в своята памет.

заключение

Оттук можем да заключим, че етапите на Spark са по-ефективни поради изчисляването им в паметта, повишената скорост на обработка дори за итеративна обработка.

Препоръчителни статии

Това е ръководство за искрови етапи. Тук обсъждаме Видовете трансформация и типовете и предимствата на искровите етапи. Може да разгледате и следните статии, за да научите повече -

  1. Как да инсталирате Spark
  2. Искрено стрийминг
  3. Кариера в Spark
  4. Искрови въпроси за интервю
  5. Преглед и топ 6 компоненти на искрата

Категория: