Ontwikkeling en testen van ETL-pijpleidingen voor AWS lokaal

Bronknooppunt: 997665

Ontwikkeling en testen van ETL-pijpleidingen voor AWS lokaal

Doorgaans wordt het ontwikkelen en testen van ETL-pijplijnen uitgevoerd in een echte omgeving/clusters, wat tijdrovend is om in te stellen en onderhoud vereist. Dit artikel richt zich op het lokaal ontwikkelen en testen van ETL-pijplijnen met behulp van Docker & LocalStack. De oplossing biedt de flexibiliteit om in een lokale omgeving te testen zonder dat er services in de cloud hoeven te worden opgezet.


By Subhash Sreenivasachar, Software Engineer Technisch Hoofd bij Epsilon

Introductie

 
 
AWS speelt een cruciale rol bij het helpen van ingenieurs en datawetenschappers om zich te concentreren op het bouwen van oplossingen en het oplossen van problemen zonder zich zorgen te hoeven maken over de noodzaak om infrastructuur op te zetten. Met een serverloze en pay-as-you-go-benadering voor prijzen, biedt AWS het gemak om on-the-fly services te creëren.

AWS Glue wordt veel gebruikt door data-ingenieurs om serverloze ETL-pijplijnen te bouwen. PySpark is een van de meest gebruikte tech-stacks die voor ontwikkeling wordt gebruikt. Ondanks de beschikbaarheid van diensten zijn er echter bepaalde uitdagingen die moeten worden aangepakt.

Het debuggen van code in een AWS-omgeving, of het nu om ETL-script (PySpark) of een andere service gaat, is een uitdaging.

  • Voortdurende monitoring van het AWS-servicegebruik is van cruciaal belang om de kostenfactor onder controle te houden
  • AWS biedt Dev Endpoint aan met alle geïnstalleerde Spark-bibliotheken, maar gezien de prijs is het niet haalbaar voor gebruik door grote ontwikkelingsteams
  • De toegankelijkheid van AWS-services kan zijn beperkt voor bepaalde gebruikers

Oplossing

 
 
Oplossingen voor AWS kunnen worden ontwikkeld en getest in de lokale omgeving, zonder dat u zich zorgen hoeft te maken over de toegankelijkheid of de kostenfactor. Via dit artikel pakken we twee problemen aan:

  1. Lokaal fouten opsporen in PySpark-code zonder gebruik te maken van AWS-ontwikkelaarseindpunten.
  2. Lokaal communiceren met AWS Services

Beide problemen kunnen worden opgelost met behulp van Docker-images.

  1. Ten eerste elimineren we de behoefte aan een server in een AWS-omgeving en in plaats daarvan fungeert een docker-image die op de machine draait als de omgeving om de code uit te voeren.

AWS biedt een sandbox-image die kan worden gebruikt voor PySpark-scripts. Docker-image kan worden ingesteld om PySpark-code uit te voeren. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Nu er een docker-machine beschikbaar is om de code uit te voeren, is er behoefte aan een service als S3 om bestanden op te slaan (lezen/schrijven) tijdens het bouwen van een ETL-pijplijn.

Interacties met S3 kunnen worden vervangen door LokaleStack dat een eenvoudig te gebruiken test-/spotframework biedt voor het ontwikkelen van cloudapplicaties. Het genereert een testomgeving op uw lokale machine die dezelfde functionaliteit en API's biedt als de echte AWS-cloudomgeving.

Voorvoegsel

Tot nu toe gaat het artikel over het bouwen van een ETL-pijplijn en het gebruik van de beschikbare diensten. Een vergelijkbare aanpak kan echter worden aangepast aan elk gebruiksscenario tijdens het werken met AWS-services zoals SNS, SQS, CloudFormation, Lambda-functies enz.

Aanpak

  • Gebruik dockercontainers als externe tolk
  • Voer een PySpark-sessie uit op de containers
  • Voer de S3-service lokaal uit met LocalStack
  • Gebruik PySpark-code om te lezen en schrijven vanuit de S3-bucket die op LocalStack draait

Pre-requisites

 
De volgende gereedschappen moeten op uw machine zijn geïnstalleerd

  • havenarbeider
  • PyCharm Professional/VisualStudio-code

Setup

  • Docker-images downloaden of ophalen (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • localstack/localstack
  • Docker-containers kunnen worden gebruikt als tolken op afstand in de professionele versie van PyCharm.

Implementatie

 
Nu Docker is geïnstalleerd en afbeeldingen naar uw lokale machine zijn getrokken, begint u PyCharm in te stellen met configuraties om de containers te starten.

  • Maak een docker-compose.yml-bestand

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

  • Maak een DockerFile

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

  • Gebruik het vereistenbestand met de te installeren pakketten

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

  • Stel de externe tolk voor Python in
    • Stel de Python-interpreter in met behulp van het docker-compose-bestand.
    • Selecteer `glue-service` in de PyCharm Docker Compose-instellingen.
    • Docker-compose file maakt de containers voor beide afbeeldingen en voert deze uit
    • LocalStack draait standaard op poort 4566 en de S3-service is daarop ingeschakeld

Code

  • Vereiste bibliotheken die moeten worden geïmporteerd

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

  • Voeg een bestand toe aan de S3-bucket die op LocalStack draait

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 is de S3 die lokaal in de docker-container draait

  • Stel een PySpark-sessie in om te lezen vanuit S3

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

  • PySpark-sessie maakt verbinding met S3 via verstrekte nepreferenties
  • U kunt rechtstreeks vanuit S3 lezen met behulp van de gemaakte PySpark-sessie

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

  • Ten slotte is het mogelijk om in elk gewenst formaat naar S3 te schrijven

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

Zodra de bovengenoemde stappen zijn gevolgd, kunnen we een dummy csv-bestand maken met nepgegevens om te testen.

  • Bestand toevoegen aan S3 (dat draait op LocalStack)
  • Lees vanaf S3
  • Schrijf terug naar S3 als parket

U zou het .py-bestand moeten kunnen uitvoeren om uit te voeren en er zal een PySpark-sessie worden gemaakt die kan lezen vanuit de S3-bucket die lokaal wordt uitgevoerd met behulp van de LocalStack API.

Bovendien kunt u ook controleren of LocalStack actief is http://localhost:4566/health

LocalStack biedt u de mogelijkheid om opdrachten uit te voeren met behulp van AWS CLI.

Conclusie

 
 
Het gebruik van Docker & Localstack biedt een snelle en gemakkelijke manier om Pyspark-code uit te voeren, fouten op te sporen in containers en te schrijven naar S3 dat lokaal wordt uitgevoerd. Dit alles zonder dat u verbinding hoeft te maken met een AWS-service.

 
Referenties:

 
Bio: Subhash Sreenivasachar is Lead Software Engineer bij het Epsilon Digital Experience-team en bouwt technische oplossingen om datawetenschapsproblemen op te lossen, met name personalisatie, en helpt de ROI voor klanten te stimuleren.

Zie ook:

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

Tijdstempel:

Meer van KDnuggets