Razvoj in preskušanje cevovodov ETL za AWS lokalno

Izvorno vozlišče: 997665

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 –

  1. Odpravljanje napak kode PySpark lokalno brez uporabe končnih točk AWS dev.
  2. Lokalna interakcija s storitvami AWS

Obe težavi je mogoče rešiti z uporabo Dockerjevih slik.

  1. 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/
 

  1. 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.

Glava

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

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

  • Ustvarite DockerFile

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

  • Uporabite datoteko zahtev s paketi za namestitev

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

  • 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

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

  • 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:

 
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

Časovni žig:

Več od KDnuggets