Razvoj in preskušanje cevovodov ETL za AWS lokalno
Običajno se razvoj in preizkušanje cevovodov ETL izvede v resničnem okolju/gručah, kar je dolgotrajno za nastavitev in zahteva vzdrževanje. Ta članek se osredotoča na razvoj in testiranje cevovodov ETL lokalno s pomočjo Docker & LocalStack. Rešitev nudi prilagodljivost za testiranje v lokalnem okolju brez nastavitve storitev v oblaku.
By Subhash Sreenivasachar, programski inženir, tehnični vodja pri Epsilonu
Predstavitev
AWS igra ključno vlogo pri pomoči inženirjem, podatkovnim znanstvenikom, da se osredotočijo na gradnjo rešitev in reševanje problemov, ne da bi morali skrbeti za potrebo po nastavitvi infrastrukture. S pristopom brez strežnika in plačilom po uporabi za določanje cen AWS zagotavlja enostavno ustvarjanje storitev na letenju.
AWS Glue pogosto uporabljajo podatkovni inženirji za izgradnjo cevovodov ETL brez strežnikov. PySpark je eden od običajnih tehnoloških skladov, ki se uporabljajo za razvoj. Vendar kljub razpoložljivosti storitev obstajajo določeni izzivi, ki jih je treba obravnavati.
Odpravljanje napak v kodi v okolju AWS, bodisi za skript ETL (PySpark) ali katero koli drugo storitev, je izziv.
- Stalno spremljanje uporabe storitve AWS je ključnega pomena za ohranjanje stroškovnega faktorja pod nadzorom
- AWS ponuja Dev Endpoint z vsemi nameščenimi knjižnicami spark, vendar glede na ceno ni primeren za uporabo v velikih razvojnih skupinah
- Dostopnost storitev AWS je lahko omejeno za določene uporabnike
Rešitev
Rešitve za AWS je mogoče razviti, preizkusiti v lokalnem okolju brez skrbi glede dostopnosti ali stroškovnega faktorja. S tem člankom obravnavamo dve težavi –
- Odpravljanje napak kode PySpark lokalno brez uporabe končnih točk AWS dev.
- Lokalna interakcija s storitvami AWS
Obe težavi je mogoče rešiti z uporabo Dockerjevih slik.
- Najprej odpravimo potrebo po strežniku v okolju AWS in namesto tega slika dockerja, ki se izvaja na stroju, deluje kot okolje za izvajanje kode.
AWS ponuja sliko peskovnika, ki se lahko uporablja za skripte PySpark. Sliko Dockerja je mogoče nastaviti za izvajanje kode PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
- Ker je za izvajanje kode na voljo docker stroj, obstaja potreba po storitvi, kot je S3, za shranjevanje (branje/pisanje) datotek med gradnjo cevovoda ETL.
Interakcije s S3 je mogoče nadomestiti z LocalStack ki zagotavlja ogrodje za testiranje/nasmehovanje, ki je enostavno za uporabo, za razvoj aplikacij v oblaku. Zavrti testno okolje na vašem lokalnem računalniku, ki zagotavlja enako funkcionalnost in API-je kot pravo okolje v oblaku AWS.
Doslej se članek ukvarja z gradnjo cevovoda ETL in uporabo razpoložljivih storitev. Vendar pa je podoben pristop mogoče prilagoditi vsakemu primeru uporabe pri delu s storitvami AWS, kot so SNS, SQS, CloudFormation, funkcije Lambda itd.
Pristop
- Uporabite docker vsebnike kot oddaljeni tolmač
- Zaženite sejo PySpark na vsebnikih
- Zavrtite storitev S3 lokalno z uporabo LocalStack
- Uporabite kodo PySpark za branje in pisanje iz vedra S3, ki se izvaja na LocalStack
Predpogoji
Na vašem stroju morajo biti nameščena naslednja orodja
- Lučki delavec
- Koda PyCharm Professional/ VisualStudio
Setup
- Prenesite ali povlecite slike dockerja (docker pull )
- libs:glue_libs_1.0.0_image_01
- localstack/localstack
- Vsebnike Docker je mogoče uporabiti kot oddaljene tolmače v profesionalni različici PyCharm.
Izvajanje
Z nameščenim Dockerjem in potegom slik na lokalni računalnik začnite nastavljati PyCharm s konfiguracijami za zagon vsebnikov.
- Ustvarite datoteko docker-compose.yml
- Ustvarite DockerFile
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- Uporabite datoteko zahtev s paketi za namestitev
- Nastavite oddaljeni tolmač Python
- Nastavite tolmač Python z uporabo datoteke docker-compose.
- Izberite `glue-service` v nastavitvah PyCharm Docker Compose.
- Datoteka Docker-compose ustvari in zažene vsebnike za obe sliki
- LocalStack privzeto deluje na vratih 4566 in na njem je omogočena storitev S3
Koda
- Knjižnice, ki jih je treba uvoziti
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports
- Dodajte datoteko v vedro S3, ki se izvaja na LocalStack
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 se S3 izvaja lokalno znotraj docker vsebnika
- Nastavite sejo PySpark za branje iz S3
- Seja PySpark se poveže s S3 prek predloženih lažnih poverilnic
- Iz S3 lahko berete neposredno z ustvarjeno sejo PySpark
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3
- Končno je možno pisati v S3 v katerem koli želenem formatu
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3
Ko smo izvedli zgoraj omenjene korake, lahko ustvarimo navidezno datoteko csv z lažnimi podatki za testiranje in morali bi biti pripravljeni
- Dodaj datoteko v S3 (ki se izvaja na LocalStack)
- Branje iz S3
- Odpiši S3 kot parket
Morali bi imeti možnost zagnati datoteko .py za izvedbo in ustvarjena bo seja PySpark, ki lahko bere iz vedra S3, ki se izvaja lokalno z API-jem LocalStack.
Poleg tega lahko tudi preverite, ali LocalStack deluje z http://localhost:4566/health
LocalStack vam omogoča tudi izvajanje ukazov z uporabo AWS CLI.
zaključek
Uporaba Docker & Localstack omogoča hiter in enostaven način za zagon kode Pyspark, odpravljanje napak v vsebnikih in pisanje v S3, ki se izvaja lokalno. Vse to, ne da bi se morali povezati s katero koli storitvijo AWS.
Reference:
- Končna točka lepila: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
Docker: https://docs.docker.com/get-docker/ - PyCharm: https://www.jetbrains.com/pycharm/
- Oddaljeni tolmač PyCharm: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- Lokalni sklad: https://localstack.cloud
Bio: Subhash Sreenivasachar je vodilni inženir programske opreme pri ekipi Epsilon Digital Experience, ki gradi inženirske rešitve za reševanje problemov podatkovne znanosti, zlasti personalizacije, in pomaga povečati donosnost naložbe za stranke.
Povezano:
Vir: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html
- "
- &
- dostopnost
- vsi
- Amazon
- analitika
- API
- API-ji
- aplikacije
- članek
- razpoložljivost
- AWS
- izgradnjo
- Building
- izziv
- stranke
- Cloud
- oblačne aplikacije
- Koda
- Skupno
- Zabojniki
- Ustvarjanje
- Mandatno
- datum
- Podatkovna analiza
- znanost o podatkih
- podatkovno skladišče
- Ponudba
- globoko učenje
- dev
- Razvoj
- digitalni
- Direktor
- Lučki delavec
- Končna točka
- inženir
- Inženiring
- Inženirji
- okolje
- itd
- prilagodljivost
- Osredotočite
- format
- Okvirni
- GitHub
- dobro
- Grafične kartice
- tukaj
- Kako
- HTTPS
- slika
- Infrastruktura
- IT
- Ključne
- velika
- vodi
- UČITE
- učenje
- lokalna
- lokalno
- ML
- spremljanje
- ponudba
- na spletu
- Ostalo
- personalizacija
- ključno
- Cena
- cenitev
- reševanje problema
- Python
- Zahteve
- Run
- tek
- peskovnik
- Znanost
- Znanstveniki
- Brez strežnika
- Storitve
- nastavitev
- Software
- Software Engineer
- rešitve
- SOLVE
- Začetek
- trgovina
- zgodbe
- tehnični
- Test
- Testiranje
- čas
- vrh
- Uporabniki
- Skladišče
- X
- let