Développement et test de pipelines ETL pour AWS localement

Nœud source: 997665

Développement et test de pipelines ETL pour AWS localement

En règle générale, le développement et les tests des pipelines ETL sont effectués sur des environnements/clusters réels, ce qui prend du temps à configurer et nécessite une maintenance. Cet article se concentre sur le développement et les tests de pipelines ETL localement à l'aide de Docker et LocalStack. La solution offre la flexibilité de tester dans un environnement local sans configurer de services sur le cloud.


By Subhash Sreenivasachar, responsable technique de l'ingénieur logiciel chez Epsilon

Introduction

 
 
AWS joue un rôle central en aidant les ingénieurs et les scientifiques des données à se concentrer sur la création de solutions et la résolution de problèmes sans se soucier de la nécessité de configurer l'infrastructure. Grâce à une approche de tarification sans serveur et avec paiement à l'utilisation, AWS facilite la création de services à la volée.

AWS Glue est largement utilisé par les ingénieurs de données pour créer des pipelines ETL sans serveur. PySpark est l'une des piles technologiques couramment utilisées pour le développement. Cependant, malgré la disponibilité des services, certains défis doivent être relevés.

Le débogage du code dans l'environnement AWS, que ce soit pour le script ETL (PySpark) ou tout autre service, est un défi.

  • La surveillance continue de l'utilisation des services AWS est essentielle pour garder le facteur coût sous contrôle.
  • AWS propose Dev Endpoint avec toutes les bibliothèques Spark installées, mais compte tenu du prix, son utilisation n'est pas viable pour les grandes équipes de développement.
  • L'accessibilité des services AWS peut être limité pour certains utilisateurs

Solution

 
 
Les solutions pour AWS peuvent être développées et testées dans un environnement local sans se soucier de l'accessibilité ou du facteur coût. À travers cet article, nous abordons deux problèmes –

  1. Débogage du code PySpark localement sans utiliser les points de terminaison de développement AWS.
  2. Interagir avec les services AWS localement

Les deux problèmes peuvent être résolus en utilisant des images Docker.

  1. Tout d'abord, nous supprimons le besoin d'un serveur sur l'environnement AWS et à la place, une image Docker exécutée sur la machine sert d'environnement pour exécuter le code.

AWS fournit une image sandbox qui peut être utilisée pour les scripts PySpark. L'image Docker peut être configurée pour exécuter le code PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Avec une machine Docker disponible pour exécuter le code, un service tel que S3 est nécessaire pour stocker (lecture/écriture) les fichiers lors de la création d'un pipeline ETL.

Les interactions avec S3 peuvent être remplacées par Pile locale qui fournit un cadre de test/mocking facile à utiliser pour développer des applications Cloud. Il lance un environnement de test sur votre machine locale qui fournit les mêmes fonctionnalités et API que le véritable environnement cloud AWS.

En-tête

Jusqu'à présent, l'article traite de la création d'un pipeline ETL et de l'utilisation des services disponibles. Cependant, une approche similaire peut être adaptée à n'importe quel cas d'utilisation lorsque vous travaillez avec des services AWS tels que SNS, SQS, CloudFormation, les fonctions Lambda, etc.

Approche

  • Utiliser des conteneurs Docker comme interprète distant
  • Exécuter la session PySpark sur les conteneurs
  • Lancez le service S3 localement à l'aide de LocalStack
  • Utilisez le code PySpark pour lire et écrire à partir du compartiment S3 exécuté sur LocalStack

Conditions préalables

 
Les outils suivants doivent être installés sur votre machine

  • Docker
  • Code PyCharm Professionnel/VisualStudio

installation

  • Téléchargez ou extrayez des images Docker (docker pull )
    • bibliothèques:glue_libs_1.0.0_image_01
    • pile locale/pile locale
  • Les conteneurs Docker peuvent être utilisés comme interprètes distants dans la version professionnelle de PyCharm.

Implémentation

 
Une fois Docker installé et les images extraites sur votre ordinateur local, commencez à configurer PyCharm avec les configurations pour démarrer les conteneurs.

  • Créer un fichier docker-compose.yml

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

  • Créer un DockerFile

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

  • Utiliser le fichier d'exigences avec les packages à installer

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

  • Configurer l'interpréteur distant Python
    • Configurez l'interpréteur Python à l'aide du fichier docker-compose.
    • Sélectionnez «glue-service» dans les paramètres de PyCharm Docker Compose.
    • Le fichier Docker-compose crée et exécute les conteneurs pour les deux images
    • LocalStack s'exécute par défaut sur le port 4566 et le service S3 y est activé

Code

  • Bibliothèques requises pour être importées

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

  • Ajouter un fichier au compartiment S3 exécuté sur LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 le S3 s'exécute-t-il localement dans le conteneur Docker

  • Configurer la session PySpark pour lire à partir de S3

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

  • La session PySpark se connecte à S3 via les informations d'identification fictives fournies
  • Vous pouvez lire depuis S3 directement en utilisant la session PySpark créée

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

  • Enfin, il est possible d'écrire sur S3 dans n'importe quel format préféré

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

Une fois les étapes mentionnées ci-dessus suivies, nous pouvons créer un fichier CSV factice avec des données fictives à des fins de test et vous devriez être prêt à le faire.

  • Ajouter un fichier à S3 (qui s'exécute sur LocalStack)
  • Lire depuis S3
  • Écrivez à S3 en tant que parquet

Vous devriez pouvoir exécuter le fichier .py pour l'exécuter et une session PySpark sera créée et pourra lire à partir du compartiment S3 qui s'exécute localement à l'aide de l'API LocalStack.

De plus, vous pouvez également vérifier si LocalStack fonctionne avec http://localhost:4566/health

LocalStack vous offre également la possibilité d'exécuter des commandes à l'aide de l'AWS CLI.

Conclusion

 
 
L'utilisation de Docker et Localstack offre un moyen rapide et simple d'exécuter du code Pyspark, de déboguer sur des conteneurs et d'écrire sur S3 qui s'exécute localement. Tout cela sans avoir à vous connecter à un service AWS.

 
Références:

 
Bio: Subhash Sreenivasachar est ingénieur logiciel principal au sein de l'équipe Epsilon Digital Experience, qui crée des solutions d'ingénierie pour résoudre les problèmes de science des données, en particulier la personnalisation, et contribuer à générer un retour sur investissement pour les clients.

Connexe:

Source : https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

Horodatage:

Plus de KDnuggetsGenericName