Разработка и тестирование конвейеров ETL для AWS локально
Как правило, разработка и тестирование конвейеров ETL выполняется в реальной среде / кластерах, что отнимает много времени на настройку и требует обслуживания. Эта статья посвящена разработке и тестированию конвейеров ETL локально с помощью Docker & LocalStack. Решение дает гибкость для тестирования в локальной среде без настройки каких-либо служб в облаке.
By Субхаш Шринивасачар, инженер-программист, технический руководитель, Epsilon
Введение
AWS играет ключевую роль, помогая инженерам и специалистам по обработке данных сосредоточиться на разработке решений и решении проблем, не беспокоясь о необходимости настройки инфраструктуры. Благодаря бессерверному подходу к ценообразованию и оплате по мере использования AWS упрощает создание сервисов «на лету».
AWS Glue широко используется инженерами данных для построения бессерверных конвейеров ETL. PySpark является одним из распространенных технологических стеков, используемых для разработки. Однако, несмотря на доступность услуг, существуют определенные проблемы, которые необходимо решить.
Отладка кода в среде AWS, будь то скрипт ETL (PySpark) или любой другой сервис, является сложной задачей.
- Постоянный мониторинг использования сервисов AWS является ключевым фактором, позволяющим держать фактор затрат под контролем.
- AWS предлагает Dev Endpoint со всеми установленными библиотеками искр, но, учитывая цену, он не подходит для использования большими командами разработчиков.
- Доступность сервисов AWS может быть ограниченный для определенных пользователей
Решения
Решения для AWS можно разрабатывать и тестировать в локальной среде, не беспокоясь о доступности или стоимости. В этой статье мы решаем две проблемы:
- Локальная отладка кода PySpark без использования конечных точек разработки AWS.
- Локальное взаимодействие с сервисами AWS
Обе проблемы можно решить с помощью образов Docker.
- Во-первых, мы устраняем необходимость в сервере в среде AWS, вместо этого образ докера, работающий на машине, действует как среда для выполнения кода.
AWS предоставляет образ песочницы, который можно использовать для сценариев PySpark. Образ Docker можно настроить для выполнения кода PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
- При наличии докер-машины для выполнения кода возникает необходимость в такой службе, как 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
- Создать DockerFile
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- Использовать файл требований с пакетами для установки
- Настроить удаленный интерпретатор 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
- Сеанс 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.
Ссылки:
- Конечная точка клея: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
Докер: https://docs.docker.com/get-docker/ - Пичарм: https://www.jetbrains.com/pycharm/
- Удаленный интерпретатор PyCharm: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- Локальный стек: https://localstack.cloud
Bio: Субхаш Шринивасачар является ведущим инженером-программистом в команде Epsilon Digital Experience, разрабатывающей инженерные решения для решения проблем обработки данных, в частности персонализации, и помогающих повысить рентабельность инвестиций для клиентов.
Связанный:
Источник: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html
- "
- &
- доступность
- Все
- Amazon
- аналитика
- API
- API
- Приложения
- гайд
- свободных мест
- AWS
- строить
- Строительство
- вызов
- клиентов
- облако
- Облачные приложения
- код
- Общий
- Контейнеры
- Создающий
- Полномочия
- данным
- Анализ данных
- наука о данных
- информационное хранилище
- Акции
- глубокое обучение
- Дев
- Развитие
- Интернет
- директор
- Docker
- Конечная точка
- инженер
- Проект и
- Инженеры
- Окружающая среда
- и т.д
- Трансформируемость
- Фокус
- формат
- Рамки
- GitHub
- хорошо
- Графические процессоры
- здесь
- Как
- HTTPS
- изображение
- Инфраструктура
- IT
- Основные
- большой
- вести
- УЧИТЬСЯ
- изучение
- локальным
- в местном масштабе
- ML
- Мониторинг
- предлагают
- онлайн
- Другое
- воплощение
- основной
- цена
- цены
- решение проблем
- Питон
- Требования
- Run
- Бег
- песочница
- Наука
- Ученые
- Serverless
- Услуги
- установка
- Software
- Инженер-программист
- Решения
- РЕШАТЬ
- Начало
- магазин
- Истории
- Технический
- тестXNUMX
- Тестирование
- время
- топ
- пользователей
- Склады
- X
- лет