Раздел 26 · Data Engineering

Архитектура Spark: driver, executors и кластер

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В прошлом уроке Spark посчитал заказы по зонам на четырёх ядрах, и в Spark UI было видно четыре задачи. Кто их раздал? Кто решил, что задач четыре, а не сорок? Разберём, из чего состоит кластер Spark и как одна строчка orders.count() превращается в работу десятков машин.

Кухня ресторана

Представьте кухню большого ресторана в час пик. Шеф-повар не стоит у плиты. Он читает заказ, раскладывает его на операции (нарезать, обжарить, собрать) и раздаёт их поварам. Повара стоят у своих плит, у каждого несколько конфорок, и на каждой конфорке готовится что-то одно. Когда повар закончил операцию, шеф даёт ему следующую.

У Spark такая же кухня:

  • шеф-повар это драйвер;
  • повара это исполнители;
  • конфорки это ядра процессора у исполнителя;
  • одна операция на одной конфорке это задача.

Драйвер

Драйвер это процесс, в котором работает ваш скрипт. Когда вы пишете orders.groupBy("zone_id").count(), никаких вычислений ещё нет: драйвер только записывает, что вы хотите сделать. Когда вы вызываете действие, например show() или count(), драйвер строит план, режет его на шаги и раздаёт работу.

Драйвер один на приложение. Если он упал, упало всё приложение. А всё, что вы забираете в Python через collect(), приходит в память драйвера, поэтому собирать туда миллиард строк нельзя. К этой ловушке мы вернёмся в уроке про типичные ошибки.

Исполнители

Исполнитель это процесс на одной из машин кластера. У него есть ядра и память. Каждое ядро ведёт одну задачу за раз. Исполнитель с четырьмя ядрами одновременно обрабатывает четыре партиции.

Кто запускает исполнителей? Менеджер кластера: Kubernetes, YARN или встроенный менеджер Spark. Драйвер просит у него, например, десять исполнителей по четыре ядра и восемь гигабайт памяти, и менеджер находит для них место на машинах.

В песочнице кластер маленький: два исполнителя по два ядра. На ноутбуке Spark часто запускают в локальном режиме: драйвер и исполнитель живут в одном процессе, а ядра это ядра вашего процессора.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.