Раздел 26 · Data Engineering

Зачем нужен Spark: когда данные перестают влезать

junior~15 мин

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

Доставка «Гонец» растёт. Пока в хранилище лежат 41 тысяча заказов за четыре месяца, любой вопрос Отто, операционного директора, решается одним SQL-запросом или скриптом на pandas: данные целиком помещаются в память ноутбука. Но продукт хочет большего. Приложение курьера каждые пять секунд присылает его координаты, и за год этих точек наберутся сотни миллионов. Сто курьеров, двенадцать часов в день, точка раз в пять секунд: это 860 тысяч точек в день, триста миллионов в год. Добавьте события приложения клиента, и данные перестанут помещаться в память одной машины. Этот блок про инструмент, который с такими объёмами справляется: Apache Spark.

Подсчёт голосов

Вспомните, как считают голоса на выборах. Если бы все бюллетени страны свезли в одну комнату к одному человеку, он считал бы их годами. Поэтому бюллетени считают тысячи участковых комиссий, каждая свою пачку. Потом комиссии отправляют свои итоги в центральную, и та складывает тысячи чисел. Сложить тысячу чисел быстро, а самую долгую работу сделали параллельно.

Spark работает так же:

  1. Данные режутся на куски, их называют партициями.
  2. Каждую партицию обрабатывает своё ядро процессора, на своей машине кластера.
  3. Частичные итоги собираются вместе и складываются.

Одной машине не нужно держать в памяти все данные: каждая видит только свои партиции.

Что такое Spark

Apache Spark это движок распределённой обработки данных. Вы описываете, что сделать с данными: прочитать, отфильтровать, сгруппировать, соединить. Spark сам решает, как разрезать работу на куски, на какие машины их отправить и как собрать результат.

Партиция это кусок данных, который обрабатывает одно ядро за раз. Если в наборе 200 партиций, а у кластера 40 ядер, Spark прогонит их в пять волн по 40.

Немного истории. До Spark большие данные считали на Hadoop MapReduce. Он тоже делил работу между машинами, но после каждого шага записывал промежуточный результат на диск, а следующий шаг читал его обратно. Задача из десяти шагов десять раз ходила на диск. Spark появился в университете Беркли в 2009 году и держит промежуточные данные в памяти, поэтому цепочки шагов в нём быстрее в разы. Сейчас актуальна четвёртая версия, ей и посвящён блок.

урок из курса

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

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