Utveckling och testning av ETL -rörledningar för AWS lokalt

Källnod: 997665

Utveckling och testning av ETL -rörledningar för AWS lokalt

Normalt utförs utveckling och testning av ETL -rörledningar på verklig miljö/kluster, vilket är tidskrävande att installera och kräver underhåll. Denna artikel fokuserar på utveckling och testning av ETL -rörledningar lokalt med hjälp av Docker & LocalStack. Lösningen ger flexibilitet att testa i en lokal miljö utan att installera några tjänster på molnet.


By Subhash Sreenivasachar, Software Engineer Technical Lead på Epsilon

Beskrivning

 
 
AWS spelar en avgörande roll för att hjälpa ingenjörer, datavetare att fokusera på att bygga lösningar och problemlösning utan att oroa sig för behovet av att installera infrastruktur. Med Serverless & pay-as-you-go tillvägagångssätt för prissättning, gör AWS det enkelt att skapa tjänster i farten.

AWS Glue används i stor utsträckning av dataingenjörer för att bygga serverlösa ETL-pipelines. PySpark är en av de vanligaste teknikstacken som används för utveckling. Men trots tillgången på tjänster finns det vissa utmaningar som måste lösas.

Att felsöka kod i AWS-miljö oavsett om det är för ETL-skript (PySpark) eller någon annan tjänst är en utmaning.

  • Löpande övervakning av AWS-tjänstanvändningen är nyckeln för att hålla kostnadsfaktorn under kontroll
  • AWS erbjuder Dev Endpoint med alla sparkbibliotek installerade, men med tanke på priset är det inte lönsamt för stora utvecklingsteam
  • Tillgänglighet för AWS-tjänster kan vara begränsad för vissa användare

Lösning

 
 
Lösningar för AWS kan utvecklas, testas i lokal miljö utan att behöva oroa sig för tillgänglighet eller kostnadsfaktor. Genom den här artikeln tar vi upp två problem –

  1. Felsökning av PySpark-kod lokalt utan att använda AWS-dev-slutpunkter.
  2. Interagera med AWS Services lokalt

Båda problemen kan lösas med hjälp av Docker-bilder.

  1. Först tar vi bort behovet av en server i AWS-miljön och istället fungerar en docker-bild som körs på maskinen som miljö för att exekvera koden.

AWS tillhandahåller en sandlådebild som kan användas för PySpark-skript. Docker-bilden kan ställas in för att exekvera PySpark Code. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Med dockningsmaskin tillgänglig för att exekvera koden, finns det ett behov av en tjänst som S3 för att lagra (läs/skriva) filer samtidigt som man bygger en ETL-pipeline.

Interaktioner med S3 kan ersättas med LocalStack som ger ett lättanvänt ramverk för test/mocking för att utveckla molnapplikationer. Den skapar en testmiljö på din lokala maskin som ger samma funktionalitet och API:er som den riktiga AWS-molnmiljön.

Sidhuvud

Hittills handlar artikeln om att bygga en ETL-pipeline och användning av tillgängliga tjänster. Liknande tillvägagångssätt kan dock anpassas till alla användningsfall när man arbetar med AWS-tjänster som SNS, SQS, CloudFormation, Lambda-funktioner etc.

Tillvägagångssätt

  • Använd dockercontainrar som fjärrtolk
  • Kör PySpark-sessionen på behållarna
  • Spin upp S3-tjänst lokalt med LocalStack
  • Använd PySpark-kod för att läsa och skriva från S3-bucket som körs på LocalStack

Förutsättningar

 
Följande verktyg måste installeras på din maskin

  • Hamnarbetare
  • PyCharm Professional/ VisualStudio-kod

Inställning

  • Ladda ner eller dra docker-bilder (docker pull )
    • libs:lim_libs_1.0.0_image_01
    • localstack/localstack
  • Docker-behållare kan användas som fjärrtolkar i PyCharms professionella version.

Genomförande

 
Med Docker installerat och bilder hämtade till din lokala dator, börja ställa in PyCharm med konfigurationer för att starta behållarna.

  • Skapa en docker-compose.yml-fil

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

  • Skapa en DockerFile

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

  • Använd kravfil med paket som ska installeras

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

  • Installera Python fjärrtolk
    • Ställ in Python-tolken med hjälp av docker-compose-filen.
    • Välj "lim-tjänst" i PyCharm Docker Compose-inställningarna.
    • Docker-compose-filen skapar och kör behållarna för båda bilderna
    • LocalStack körs som standard på port 4566 och S3-tjänsten är aktiverad på den

Koda

  • Bibliotek som krävs för att importeras

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

  • Lägg till en fil till S3-bucket som körs på LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 är S3:an som körs lokalt i dockercontainern

  • Ställ in PySpark-session för att läsa från S3

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

  • PySpark-sessionen ansluter till S3 via tillhandahållna skenuppgifter
  • Du kan läsa från S3 direkt med den skapade PySpark-sessionen

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

  • Slutligen är det möjligt att skriva till S3 i vilket format som helst

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

När de ovannämnda stegen har följts kan vi skapa en dummy csv-fil med mock-data för testning och du bör vara duktig på att

  • Lägg till fil till S3 (som körs på LocalStack)
  • Läs från S3
  • Skriv tillbaka till S3 som parkett

Du bör kunna köra .py-filen för att köra och PySpark-sessionen kommer att skapas som kan läsas från S3-bucket som körs lokalt med LocalStack API.

Dessutom kan du också kontrollera om LocalStack körs med http://localhost:4566/health

LocalStack ger dig möjlighet att köra kommandon med AWS CLI också.

Slutsats

 
 
Användning av Docker & Localstack ger ett snabbt och enkelt sätt att köra Pyspark-kod, felsöka på behållare och skriva till S3 som körs lokalt. Allt detta utan att behöva ansluta till någon AWS-tjänst.

 
Referenser:

 
Bio: Subhash Sreenivasachar är Lead Software Engineer på Epsilon Digital Experience-teamet, som bygger tekniska lösningar för att lösa datavetenskapliga problem, särskilt personalisering, och hjälpa till att driva ROI för kunder.

Relaterat:

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

Tidsstämpel:

Mer från KDnuggets