Udvikling & Test af ETL Pipelines til AWS lokalt

Kildeknude: 997665

Udvikling & Test af ETL Pipelines til AWS lokalt

Typisk udføres udvikling og test af ETL-pipelines på rigtige miljøer/klynger, hvilket er tidskrævende at konfigurere og kræver vedligeholdelse. Denne artikel fokuserer på udvikling og test af ETL-pipelines lokalt ved hjælp af Docker & LocalStack. Løsningen giver fleksibilitet til at teste i et lokalt miljø uden at opsætte nogen tjenester i skyen.


By Subhash Sreenivasachar, Software Engineer Technical Lead hos Epsilon

Introduktion

 
 
AWS spiller en central rolle i at hjælpe ingeniører, dataforskere med at fokusere på at bygge løsninger og problemløsning uden at bekymre sig om behovet for at opsætte infrastruktur. Med Serverless & pay-as-you-go tilgang til prisfastsættelse, giver AWS let at skabe tjenester på farten.

AWS Glue bruges i vid udstrækning af dataingeniører til at bygge serverløse ETL-pipelines. PySpark er en af ​​de almindelige tech-stack, der bruges til udvikling. Men på trods af tilgængeligheden af ​​tjenester er der visse udfordringer, der skal løses.

Fejlretning af kode i AWS-miljø, uanset om det er til ETL-script (PySpark) eller enhver anden tjeneste, er en udfordring.

  • Løbende overvågning af AWS-tjenestebrug er nøglen til at holde omkostningsfaktoren under kontrol
  • AWS tilbyder Dev Endpoint med alle gnistbiblioteker installeret, men prisen taget i betragtning er det ikke levedygtigt til brug for store udviklingsteams
  • Tilgængelighed af AWS-tjenester kan være begrænset for visse brugere

Løsning

 
 
Løsninger til AWS kan udvikles, testes i lokalmiljøet uden at bekymre sig om tilgængelighed eller omkostningsfaktor. Gennem denne artikel adresserer vi to problemer –

  1. Debugging PySpark-kode lokalt uden brug af AWS-dev-endepunkter.
  2. Interagere med AWS Services lokalt

Begge problemer kan løses ved brug af Docker-billeder.

  1. Først fjerner vi behovet for en server i AWS-miljøet, og i stedet fungerer et docker-image, der kører på maskinen, som miljøet til at udføre koden.

AWS leverer et sandkassebillede, som kan bruges til PySpark-scripts. Docker-billede kan konfigureres til at udføre PySpark Code. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Med docker-maskine tilgængelig til at udføre koden, er der behov for en tjeneste som S3 til at gemme (læse/skrive) filer, mens der bygges en ETL-pipeline.

Interaktioner med S3 kan erstattes med LocalStack som giver en letanvendelig test/hånende ramme til udvikling af Cloud-applikationer. Det opretter et testmiljø på din lokale maskine, der giver samme funktionalitet og API'er som det rigtige AWS-skymiljø.

Header

Indtil videre omhandler artiklen opbygning af en ETL-pipeline og brug af tilgængelige tjenester. En lignende tilgang kan dog tilpasses til enhver brugssituation, mens du arbejder med AWS-tjenester som SNS, SQS, CloudFormation, Lambda-funktioner osv.

Tilgang

  • Brug docker-containere som fjerntolk
  • Kør PySpark-session på containerne
  • Drej S3-tjenesten op lokalt ved hjælp af LocalStack
  • Brug PySpark-koden til at læse og skrive fra S3-bøtten, der kører på LocalStack

Forudsætninger

 
Følgende værktøjer skal installeres på din maskine

  • Docker
  • PyCharm Professional/ VisualStudio-kode

Opsætning

  • Download eller træk docker-billeder (docker pull )
    • libs:lim_libs_1.0.0_image_01
    • localstack/localstack
  • Docker-containere kan bruges som fjerntolke i PyCharm professionel version.

Implementering

 
Med Docker installeret og billeder trukket til din lokale maskine, begynd at indstille PyCharm med konfigurationer til at starte containerne.

  • Opret en docker-compose.yml fil

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

  • Opret en DockerFile

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

  • Brug kravfil med pakker, der skal installeres

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

  • Konfigurer Python fjernfortolker
    • Konfigurer Python-fortolkeren ved hjælp af docker-compose-filen.
    • Vælg "lim-tjeneste" i PyCharm Docker Compose-indstillingerne.
    • Docker-compose-filen opretter og kører containerne for begge billeder
    • LocalStack kører som standard på port 4566, og S3-tjenesten er aktiveret på den

Kode

  • Nødvendige biblioteker skal importeres

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

  • Tilføj en fil til S3-bøtten, der kører på LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 er S3'eren, der kører lokalt inde i docker-containeren

  • Konfigurer PySpark-session til at læse fra S3

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

  • PySpark-sessionen opretter forbindelse til S3 via mock-legitimationsoplysninger
  • Du kan læse fra S3 direkte ved at bruge den oprettede PySpark-session

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

  • Endelig er det muligt at skrive til S3 i ethvert foretrukket format

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

Når de ovennævnte trin er blevet fulgt, kan vi oprette en dummy csv-fil med mock-data til test, og du skal være god til at

  • Tilføj fil til S3 (som kører på LocalStack)
  • Læs fra S3
  • Skriv tilbage til S3 som parket

Du bør være i stand til at køre .py-filen for at udføre, og PySpark-sessionen vil blive oprettet, som kan læse fra S3-bøtten, som kører lokalt ved hjælp af LocalStack API.

Derudover kan du også tjekke, om LocalStack kører med http://localhost:4566/health

LocalStack giver dig også mulighed for at køre kommandoer ved hjælp af AWS CLI.

Konklusion

 
 
Brug af Docker & Localstack giver en hurtig og nem måde at køre Pyspark-kode på, fejlsøge på containere og skrive til S3, som kører lokalt. Alt dette uden at skulle oprette forbindelse til nogen AWS-tjeneste.

 
Referencer:

 
Bio: Subhash Sreenivasachar er Lead Software Engineer hos Epsilon Digital Experience-teamet, der bygger tekniske løsninger til at løse datavidenskabelige problemer, specifikt personalisering, og hjælpe med at fremme ROI for kunder.

Relateret:

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

Tidsstempel:

Mere fra KDnuggets