ETL-csővezetékek fejlesztése és tesztelése az AWS-hez helyileg

Forrás csomópont: 997665

ETL-csővezetékek fejlesztése és tesztelése az AWS-hez helyileg

Az ETL-folyamatok fejlesztése és tesztelése általában valós környezetben/fürtökön történik, ami időigényes telepítést és karbantartást igényel. Ez a cikk az ETL-folyamatok helyi fejlesztésére és tesztelésére összpontosít, a Docker & LocalStack segítségével. A megoldás rugalmasságot biztosít a helyi környezetben végzett teszteléshez anélkül, hogy a felhőben bármiféle szolgáltatást kellene beállítani.


By Subhash Sreenivasachar, szoftvermérnök műszaki vezető az Epsilonnál

Bevezetés

 
 
Az AWS kulcsfontosságú szerepet játszik abban, hogy segítse a mérnököket, adattudósokat, hogy a megoldások kidolgozására és a problémamegoldásra összpontosítsanak anélkül, hogy aggódnának az infrastruktúra beállításának szükségessége miatt. A kiszolgáló nélküli és felosztó-kirovó megközelítéssel az árazás során az AWS könnyű szolgáltatást biztosít a menet közben.

Az AWS Glue-t az adatmérnökök széles körben használják szerver nélküli ETL-folyamatok építésére. A PySpark a fejlesztéshez használt egyik általános technológiai verem. A szolgáltatások elérhetősége ellenére azonban vannak bizonyos kihívások, amelyekkel foglalkozni kell.

A kód hibakeresése AWS környezetben, akár ETL-szkripthez (PySpark), akár bármely más szolgáltatáshoz, kihívást jelent.

  • Az AWS-szolgáltatás használatának folyamatos nyomon követése kulcsfontosságú a költségtényező ellenőrzés alatt tartásához
  • Az AWS kínálja a Dev Endpointot az összes telepített spark könyvtárral, de az árat tekintve nem életképes nagy fejlesztőcsapatok számára.
  • Az AWS szolgáltatások elérhetősége lehet korlátozott bizonyos felhasználók számára

Megoldás

 
 
Az AWS-megoldások fejleszthetők, tesztelhetők helyi környezetben anélkül, hogy aggódnának a hozzáférhetőség vagy a költségtényező miatt. Ebben a cikkben két problémával foglalkozunk:

  1. PySpark kód helyi hibakeresése AWS fejlesztői végpontok használata nélkül.
  2. Helyi kapcsolattartás az AWS-szolgáltatásokkal

Mindkét probléma megoldható Docker képek használatával.

  1. Először is megszüntetjük az AWS-környezetben lévő kiszolgáló szükségességét, ehelyett a gépen futó docker-képfájl a kód végrehajtásának környezeteként működik.

Az AWS egy sandbox-képet biztosít, amely PySpark-szkriptekhez használható. A Docker lemezkép beállítható a PySpark kód végrehajtására. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Mivel a kód végrehajtásához elérhető dokkológép, szükség van egy olyan szolgáltatásra, mint az S3, hogy tárolja (olvasási/írási) fájlokat az ETL-folyamat építése közben.

Az S3-mal való kölcsönhatások helyettesíthetők LocalStack amely könnyen használható teszt/gúnyos keretrendszert biztosít a felhőalkalmazások fejlesztéséhez. Olyan tesztelési környezetet hoz létre a helyi gépen, amely ugyanazt a funkcionalitást és API-kat kínálja, mint a valódi AWS felhőkörnyezet.

Fejléc

A cikk eddig az ETL-csővezeték kiépítésével és az elérhető szolgáltatások használatával foglalkozik. Hasonló megközelítés azonban bármilyen használati esethez adaptálható az AWS-szolgáltatások, például az SNS, SQS, CloudFormation, Lambda funkciók stb. használata során.

Megközelítés

  • Docker konténerek használata távoli tolmácsként
  • Futtassa a PySpark munkamenetet a tárolókon
  • Pörgesd fel az S3 szolgáltatást helyben a LocalStack segítségével
  • Használja PySpark kódot a LocalStack-en futó S3 tárolóból való olvasáshoz és íráshoz

Előfeltétele

 
A következő eszközöket kell telepíteni a gépére

  • Dokkmunkás
  • PyCharm Professional/ VisualStudio kód

felépítés

  • Docker képek letöltése vagy lehívása (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • localstack/localstack
  • A Docker konténerek távoli tolmácsként használhatók a PyCharm professzionális verziójában.

Implementáció

 
Ha a Docker telepítve van, és a képeket lehívta a helyi gépre, kezdje el a PyCharm beállítását a tárolók elindításához szükséges konfigurációkkal.

  • Hozzon létre egy docker-compose.yml fájlt

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

  • Hozzon létre egy DockerFile-t

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

  • Használja a követelményfájlt a telepítendő csomagokkal

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

  • Állítsa be a Python távoli tolmácsot
    • Állítsa be a Python interpretert a docker-compose fájl segítségével.
    • A PyCharm Docker Compose beállításaiban válassza a „ragasztószolgáltatás” lehetőséget.
    • A Docker-compose fájl mindkét képhez létrehozza és futtatja a tárolókat
    • A LocalStack alapértelmezés szerint a 4566-os porton fut, és az S3 szolgáltatás engedélyezve van rajta

Kód

  • Az importáláshoz szükséges könyvtárak

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

  • Adjon hozzá egy fájlt a LocalStack-en futó S3 tárolóhoz

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 az S3 helyileg fut a docker konténerben

  • Állítsa be a PySpark munkamenetet az S3-ból való olvasáshoz

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

  • A PySpark-munkamenet a megadott álhitelesítő adatokkal csatlakozik az S3-hoz
  • Az S3-ból közvetlenül olvashat a létrehozott PySpark-munkamenet segítségével

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

  • Végül lehetséges az S3-ba bármilyen kívánt formátumban írni

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

A fent említett lépések végrehajtása után létrehozhatunk egy ál-csv-fájlt próbaadatokkal tesztelés céljából.

  • Fájl hozzáadása az S3-hoz (amely a LocalStack-en fut)
  • Olvasás az S3-ból
  • Írd vissza az S3-ra parkettaként

Lehetővé kell tennie a .py fájl futtatását a végrehajtáshoz, és létrejön a PySpark-munkamenet, amely képes olvasni a LocalStack API-val helyileg futó S3 tárolóból.

Ezenkívül azt is ellenőrizheti, hogy a LocalStack fut-e a következővel http://localhost:4566/health

A LocalStack lehetőséget biztosít parancsok futtatására az AWS CLI használatával is.

Következtetés

 
 
A Docker & Localstack használata gyors és egyszerű módot biztosít a Pyspark kód futtatására, a konténereken történő hibakeresésre és a helyileg futó S3-ra írásra. Mindezt anélkül, hogy bármilyen AWS-szolgáltatáshoz kellene csatlakoznia.

 
Referenciák:

 
Bio: Subhash Sreenivasachar az Epsilon Digital Experience csapatának vezető szoftvermérnöke, aki olyan mérnöki megoldásokat épít, amelyek az adattudományi problémákat, konkrétan a személyre szabással oldják meg, és segítik az ügyfelek megtérülését.

Kapcsolódó:

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

Időbélyeg:

Még több KDnuggets