Разработка и тестирование конвейеров ETL для AWS локально

Исходный узел: 997665

Разработка и тестирование конвейеров ETL для AWS локально

Как правило, разработка и тестирование конвейеров ETL выполняется в реальной среде / кластерах, что отнимает много времени на настройку и требует обслуживания. Эта статья посвящена разработке и тестированию конвейеров ETL локально с помощью Docker & LocalStack. Решение дает гибкость для тестирования в локальной среде без настройки каких-либо служб в облаке.


By Субхаш Шринивасачар, инженер-программист, технический руководитель, Epsilon

Введение

 
 
AWS играет ключевую роль, помогая инженерам и специалистам по обработке данных сосредоточиться на разработке решений и решении проблем, не беспокоясь о необходимости настройки инфраструктуры. Благодаря бессерверному подходу к ценообразованию и оплате по мере использования AWS упрощает создание сервисов «на лету».

AWS Glue широко используется инженерами данных для построения бессерверных конвейеров ETL. PySpark является одним из распространенных технологических стеков, используемых для разработки. Однако, несмотря на доступность услуг, существуют определенные проблемы, которые необходимо решить.

Отладка кода в среде AWS, будь то скрипт ETL (PySpark) или любой другой сервис, является сложной задачей.

  • Постоянный мониторинг использования сервисов AWS является ключевым фактором, позволяющим держать фактор затрат под контролем.
  • AWS предлагает Dev Endpoint со всеми установленными библиотеками искр, но, учитывая цену, он не подходит для использования большими командами разработчиков.
  • Доступность сервисов AWS может быть ограниченный для определенных пользователей

Решения

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

  1. Локальная отладка кода PySpark без использования конечных точек разработки AWS.
  2. Локальное взаимодействие с сервисами AWS

Обе проблемы можно решить с помощью образов Docker.

  1. Во-первых, мы устраняем необходимость в сервере в среде AWS, вместо этого образ докера, работающий на машине, действует как среда для выполнения кода.

AWS предоставляет образ песочницы, который можно использовать для сценариев PySpark. Образ Docker можно настроить для выполнения кода PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. При наличии докер-машины для выполнения кода возникает необходимость в такой службе, как S3, для хранения (чтения/записи) файлов при построении конвейера ETL.

Взаимодействия с S3 можно заменить на локальный стек который предоставляет простую в использовании среду тестирования/моделирования для разработки облачных приложений. Он запускает тестовую среду на вашем локальном компьютере, которая предоставляет те же функции и API, что и реальная облачная среда AWS.

заголовок

Пока что в статье речь идет о построении конвейера ETL и использовании доступных сервисов. Однако аналогичный подход можно адаптировать к любому варианту использования при работе с сервисами AWS, такими как SNS, SQS, CloudFormation, функции Lambda и т. д.

Подход

  • Используйте контейнеры докеров в качестве удаленного интерпретатора
  • Запустите сеанс PySpark на контейнерах
  • Развернуть службу S3 локально с помощью LocalStack
  • Используйте код PySpark для чтения и записи из корзины S3, работающей на LocalStack.

Предварительные условия

 
Следующие инструменты должны быть установлены на вашем компьютере

  • Docker
  • Код PyCharm Professional/VisualStudio

Установка

  • Загрузите или извлеките образы Docker (docker pull )
    • библиотеки: Glue_libs_1.0.0_image_01
    • локальный стек/локальный стек
  • Контейнеры Docker можно использовать в качестве удаленных интерпретаторов в профессиональной версии PyCharm.

Реализация

 
Установив Docker и перетащив образы на локальный компьютер, начните настройку PyCharm с конфигурациями для запуска контейнеров.

  • Создайте файл docker-compose.yml

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-docker-compose-yml

  • Создать DockerFile

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile

  • Использовать файл требований с пакетами для установки

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-requirements-txt
 

  • Настроить удаленный интерпретатор Python
    • Настройте интерпретатор Python с помощью файла docker-compose.
    • Выберите `glue-service` в настройках PyCharm Docker Compose.
    • Файл Docker-compose создает и запускает контейнеры для обоих образов.
    • LocalStack по умолчанию работает на порту 4566, и на нем включена служба S3.

Code

  • Необходимые библиотеки для импорта

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports

  • Добавьте файл в корзину S3, работающую на LocalStack.

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 S3 работает локально внутри док-контейнера

  • Настройте сеанс PySpark для чтения с S3

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-create_pyspark_session

  • Сеанс PySpark подключается к S3 с помощью предоставленных фиктивных учетных данных.
  • Вы можете читать с S3 напрямую, используя созданный сеанс PySpark

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3

  • Наконец, можно записывать в S3 в любом предпочтительном формате.

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3

После выполнения вышеупомянутых шагов мы можем создать фиктивный CSV-файл с фиктивными данными для тестирования, и вы должны быть готовы к

  • Добавить файл в S3 (который работает на LocalStack)
  • Чтение из S3
  • Записать обратно в S3 как паркет

Вы должны иметь возможность запустить файл .py для выполнения, и будет создан сеанс PySpark, который может читать из корзины S3, которая работает локально с использованием LocalStack API.

Кроме того, вы также можете проверить, работает ли LocalStack с http://localhost:4566/health

LocalStack также предоставляет вам возможность запускать команды с помощью интерфейса командной строки AWS.

Заключение

 
 
Использование Docker и Localstack обеспечивает быстрый и простой способ запуска кода Pyspark, отладки контейнеров и записи в S3, который работает локально. И все это без необходимости подключения к какому-либо сервису AWS.

 
Ссылки:

 
Bio: Субхаш Шринивасачар является ведущим инженером-программистом в команде Epsilon Digital Experience, разрабатывающей инженерные решения для решения проблем обработки данных, в частности персонализации, и помогающих повысить рентабельность инвестиций для клиентов.

Связанный:



Главные истории за последние 30 дней
Самые популярные
  1. Специалисты по обработке данных и инженеры по машинному обучению - роскошные сотрудники
  2. 6 лучших онлайн-курсов по науке о данных в 2021 году
  3. Совет по изучению науки о данных от директора по исследованиям Google
  4. Панд мало? Вот несколько хороших альтернатив обработке больших и быстрых данных в Python
  5. Путь к обучению, чтобы стать специалистом по данным
Самые общие
  1. Специалисты по обработке данных и инженеры по машинному обучению - роскошные сотрудники
  2. Расслабиться! Data Scientists не исчезнут через 10 лет, но их роль изменится
  3. Панд мало? Вот несколько хороших альтернатив обработке больших и быстрых данных в Python
  4. Почему и как вы должны изучать «Продуктивную науку о данных»?
  5. Не только для глубокого обучения: как графические процессоры ускоряют науку о данных и аналитику данных

Источник: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

Отметка времени:

Больше от КДнаггетс