Розробка та тестування трубопроводів ETL для AWS на місцевому рівні

Вихідний вузол: 997665

Розробка та тестування трубопроводів ETL для AWS на місцевому рівні

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


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

Вступ

 
 
AWS відіграє ключову роль, допомагаючи інженерам і дослідникам даних зосередитися на розробці рішень і вирішенні проблем, не турбуючись про необхідність налаштування інфраструктури. Завдяки безсерверному підходу до ціноутворення з оплатою за використання, AWS забезпечує легке створення послуг на льоту.

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

Налагодження коду в середовищі AWS для сценарію ETL (PySpark) чи будь-якої іншої служби є складним завданням.

  • Постійний моніторинг використання сервісу AWS є ключовим для того, щоб тримати фактор витрат під контролем
  • AWS пропонує Dev Endpoint із усіма встановленими бібліотеками spark, але, враховуючи ціну, вона непридатна для використання великими командами розробників
  • Доступність сервісів 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 можна замінити на LocalStack який надає просту у користуванні структуру тестування/імітації для розробки хмарних програм. Він створює тестове середовище на вашій локальній машині, яке забезпечує ті самі функції та API, що й справжнє хмарне середовище AWS.

Header

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

Підхід

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

Передумови

 
На вашій машині повинні бути встановлені такі інструменти

  • Docker
  • Код PyCharm Professional/ VisualStudio

Setup

  • Завантажте або витягніть зображення докерів (docker pull )
    • libs: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

код

  • Необхідні бібліотеки для імпорту

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, який працює локально за допомогою API LocalStack.

Крім того, ви також можете перевірити, чи працює LocalStack з http://localhost:4566/health

LocalStack також надає вам можливість запускати команди за допомогою AWS CLI.

Висновок

 
 
Використання Docker & Localstack забезпечує швидкий і простий спосіб запуску коду Pyspark, налагодження контейнерів і запису в S3, який працює локально. Усе це без необхідності підключення до будь-якої служби AWS.

 
Список використаної літератури:

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

За темою:

Джерело: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

Часова мітка:

Більше від KDnuggets