Рубрики
Uncategorized

Spark и Docker: Ваш цикл развития искры только что получил 10 раза быстрее!

Почему искра и докер? Преимущества, которые поставляются с использованием контейнеров докеров, хорошо известны: … Теги от искры, докера, Куберанес, дежопах.

Преимущества, которые поставляются с использованием контейнеров Docker, хорошо известны: они предоставляют согласованные и изолированные среды, чтобы приложения могли быть развернуты в любом месте — локально, в средах DEV/тестирования/продвижения, во всех облачных поставщиках, а также на месте — повторяющийся путь Отказ

Мир программного обеспечения Engineering полностью принял Docker, и многие инструменты вокруг Docker изменили способ создания и развертывания программного обеспечения — тестирование, CI/CD, управление зависимостями, управление вариантом, управление мониторингом, безопасность. Популярность Кубернаны Как новый стандарт для управления контейнерами и управления инфраструктурой следует из популярности Докер Отказ

В больших данных и Apache Spark Сцена, большинство приложений все еще бегают непосредственно на виртуальных машинах, не получавших выгоду от контейнера. Доминирующий кластер-менеджер для искры, Hadoop-пряжи, не поддерживал докеровские контейнеры до Недавно (Release Hadoop 3.1) И даже сегодня поддержка докера остается «экспериментальной и не завершенной».

Нативная поддержка Docker на самом деле является одной из основных причин, по которым компании выбирают | Искра на вершине Куберанес вместо пряжи .

В этой статье мы проиллюстрием преимущества Docker для Apache Spark, пройдя через конечный цикл разработки, используемым многими нашими пользователями на Механика данных Отказ

Преимущества Docker для Apache Spark

1. Создайте свои зависимости один раз, беги повсюду

Ваше приложение будет работать так же, куда бы вы ни запускаете: на вашем ноутбуке для DEV/тестирования или в любой из ваших производственных сред. В вашем образе докера вы будете:

  • Пакет вашего приложенного кода
  • Пакет всех ваших зависимостей (Python: Pypi, яйца, кондей, Scala/Java: банки, Maven; системные зависимости)
  • Определите переменные среды для настройки поведения во время выполнения
  • Настройте свою операционную систему так, как вы хотите

Если работает на Kubernetes: вы можете выбрать свою искру для каждого отдельного образа докера! Это в отличие от пряжи, где вы должны использовать ту же глобальную версию искры для всего кластера.

2. Сделайте искру более надежными и экономически эффективными в производстве.

Поскольку вы можете управлять всей средой, когда вы создаете свой образ докера, это означает, что вам не нужны какие-либо сценарии init/Bootstrap для выполнения во время выполнения. Эти скрипты имеют несколько вопросов:

  • Они не надежны — монтаж библиотеки может потерпеть неудачу из-за неспособности к ложным сбою сети и нести ответственность за недостаток вашего искропровода в производстве.
  • Они медленные — эти сценарии выполнения могут добавлять несколько минут до времени установки каждого из ваших искровых узлов, что увеличивает ваши расходы.
  • Их трудно развивать, поддерживать и отлаживать. ### 3. Ускорить свой итерационный цикл. При механике данных наши пользователи находятся на нашем цикле итерации 20-30, с того времени, когда они делают изменение кода в их IDE к времени, когда это изменение работает как приложение Spark на нашей платформе.

Это в основном благодаря тому факту, что докер кеширует ранее построенные слои, и что Kubernetes действительно быстрые при запуске/перезапуске докеровских контейнеров.

Учебное пособие: как ускорить цикл вашего зажигания на 10x с Docker

В этом разделе мы покажем вам, как работать с Spark и Docker, пошаговый. Пример скриншотов и образцов кода извлекаются из запуска приложения Pyspark на платформе механики данных, но этот пример можно просто адаптировать для работы в других средах.

1. Строительство образа докера

Мы начнем с местного проекта Pyspark с некоторыми зависимостями, и Dockerfile, который объяснит, как построить документ Docker для этого проекта. После создания документа докера мы можем напрямую запускать его локально, или сначала нажимайте в реестр Docker, а затем запустите его на кластере механизма данных.

Благодаря Docker нет необходимости упаковать сторонние зависимостями и пользовательские модули в хрупких почтовых файлах. Вы можете просто поставить свой главный скрипт и его зависимости.

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

Давайте посмотрим на DockerFile. В этом примере:

  • Мы начинаем с базового изображения, опубликованного механикой данных. Это изображение соответствует основным искрому изображению (3.0 здесь). Мы подробно обсудим этот выбор в конце этой статьи.
  • Затем мы устанавливаем наши зависимости. Мы использовали пипс здесь, но мы могли бы также использовать Кондо.
  • Мы наконец копируем наш собственный код и основной файл. Поскольку это код, который мы будем в первую очередь, при этом рекомендуется сделать это в конце, чтобы при изменении этого кода Docker не нужно восстановить изображение с нуля.
  • Также легко настроить переменные среды на этом шаге.

2. Местный пробег

Затем вы можете построить это изображение и запустить его локально. Это означает, что искра будет работать в локальном режиме; как один контейнер на вашем ноутбуке. Вы не сможете обрабатывать большие объемы данных, но это полезно, если вы просто хотите проверить вашу корректность кода (возможно, используя небольшое подмножество реальных данных), или запустить тесты подразделения.

На среднем ноутбуке это заняло 15 секунд. Если вы собираетесь многоеретать на этом этапе и хотите оптимизировать скорость дальше; Тогда вместо повторного создания изображения вы можете просто установить локальные файлы (из вашего рабочего каталога на вашем ноутбуке) в рабочий каталог на изображении.

3. Работать в масштабе

Код выглядит правильно, и теперь мы хотим запустить этот образ в масштабе (распределенным образом) на полном наборе данных. Мы собираемся нажать на изображение в наш реестр Docker, а затем предоставить имя изображения в качестве параметра в REST API CALL Чтобы представить это искровое приложение для механики данных.

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

На среднем ноутбуке этот шаг занял 20 секунд, чтобы завершить: 10 секунд, чтобы построить и нажать изображение, 10 секунд для приложения для начала механики данных — означает, что Spark Driver начинает выполнять наш код main.py.

Очень менее чем за 30 секунд, вы можете повторить свой искровой код и запустить его на производственных данных! И вы можете сделать это, не оставляя свою IDE (вам не нужно вставлять свой код в ноутбук или интерактивную оболочку). Это шанс игр для зарабатывателей, ускоренных на 10x по сравнению с средней отраслью.

«Я действительно люблю, что мы можем использовать Docker, чтобы упаковать код на механике данных. Это огромная победа для упрощения развертывания Pyspark. На основе итераций, которые я закончил, это занимает менее 30 секунд

Этот быстрый цикл итерации благодаря доке, кэшируете предыдущие слои изображения, а также платформы механики данных (развернутые на Kubernetes), оптимизирующих быстрые контейнерные запуска и перезагрузки приложения.

Как выбрать свою искровую базу докера

Чтобы запустить искровое приложение на механике данных, вы должны использовать одно из наших опубликованных изображений искры в качестве базового изображения (в первой строке вашего DockerFile). Мы регулярно публикуем новые изображения, в том числе всякий раз, когда выпущена новая версия Spark или когда исправление безопасности доступна.

Эти искры содержат:

  • Версия искры, например 2.4 или 3.0
  • Некоторые разъемы данных, например К S3, GCS, Azure Blob Storage и снежинка
  • Зависимости, требуемые нашими функциями платформы, такие как интеграция Jupyter или Reverics Data Mechanics (замена нашей Spark UI)

Они свободно доступны для всех, и вы также можете использовать их, чтобы запустить искру локально или на других платформах.

Вывод

Мы продемонстрировали, как Docker может помочь вам:

  • Пакет ваших зависимостей и контролировать окружающую среду простым способом.
  • Итайте на вашем коде из вашего IDE, быстро бегая искра локально или в масштабе
  • Сделайте искру более надежными и экономически эффективными в производстве. Наконец, вы можете попрощаться с медленными и полными сценариями Bootstrap и загрузки времени выполнения!

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

Бег искры на Кубестере в докеренном и облачном агностическом пути имеет много других преимуществ. Например, вы можете использовать выше шаги для создания конвейера CI/CD, который автоматизирует здание и развертывание приложений Spark Test, когда вы отправляете запрос на потяну, чтобы изменить один из ваших производственных трубопроводов. Мы рассмотрим это в будущем пост блога — так что оставайтесь настроенными!

Оригинал: «https://dev.to/jystephan/spark-and-docker-your-spark-development-cycle-just-got-10x-faster-12hm»