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 –
- Debugging PySpark-kode lokalt uden brug af AWS-dev-endepunkter.
- Interagere med AWS Services lokalt
Begge problemer kan løses ved brug af Docker-billeder.
- 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/
- 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ø.
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
- Opret en DockerFile
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- Brug kravfil med pakker, der skal installeres
- 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
- 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:
- Lim slutpunkt: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
Docker: https://docs.docker.com/get-docker/ - PyCharm: https://www.jetbrains.com/pycharm/
- PyCharm fjernfortolker: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- LocalStack: https://localstack.cloud
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
- "
- &
- tilgængelighed
- Alle
- Amazon
- analytics
- api
- API'er
- applikationer
- artikel
- tilgængelighed
- AWS
- bygge
- Bygning
- udfordre
- kunder
- Cloud
- sky applikationer
- kode
- Fælles
- Beholdere
- Oprettelse af
- Legitimationsoplysninger
- data
- Dataanalyse
- datalogi
- datalager
- Tilbud
- dyb læring
- dev
- Udvikling
- digital
- Direktør
- Docker
- Endpoint
- ingeniør
- Engineering
- Ingeniører
- Miljø
- etc.
- Fleksibilitet
- Fokus
- format
- Framework
- GitHub
- godt
- GPU'er
- link.
- Hvordan
- HTTPS
- billede
- Infrastruktur
- IT
- Nøgle
- stor
- føre
- LÆR
- læring
- lokale
- lokalt
- ML
- overvågning
- tilbyde
- online
- Andet
- Personalisering
- afgørende
- pris
- prissætning
- problemløsning
- Python
- Krav
- Kør
- kører
- sandkasse
- Videnskab
- forskere
- Serverless
- Tjenester
- indstilling
- Software
- Software Engineer
- Løsninger
- SOLVE
- starte
- butik
- Historier
- Teknisk
- prøve
- Test
- tid
- top
- brugere
- Warehouse
- X
- år