Rozwój i testowanie potoków ETL dla AWS Locally
Zazwyczaj opracowywanie i testowanie potoków ETL odbywa się w rzeczywistym środowisku/klastrach, co jest czasochłonne w konfiguracji i wymaga konserwacji. Ten artykuł koncentruje się na opracowywaniu i testowaniu potoków ETL lokalnie przy pomocy platformy Docker i LocalStack. Rozwiązanie zapewnia elastyczność testowania w środowisku lokalnym bez konfigurowania jakichkolwiek usług w chmurze.
By Subhash Sreenivasachar, kierownik techniczny inżyniera oprogramowania w firmie Epsilon
Wprowadzenie
AWS odgrywa kluczową rolę, pomagając inżynierom i analitykom danych skupić się na budowaniu rozwiązań i rozwiązywaniu problemów bez martwienia się o konieczność konfigurowania infrastruktury. Dzięki podejściu Serverless i pay-as-you-go do ustalania cen, AWS zapewnia łatwość tworzenia usług w locie.
AWS Glue jest szeroko stosowany przez inżynierów danych do budowania bezserwerowych potoków ETL. PySpark jest jednym z powszechnych stosów technologii używanych do programowania. Jednak pomimo dostępności usług istnieją pewne wyzwania, którym należy sprostać.
Debugowanie kodu w środowisku AWS czy to dla skryptu ETL (PySpark) czy jakiejkolwiek innej usługi jest wyzwaniem.
- Bieżące monitorowanie wykorzystania usług AWS jest kluczem do kontrolowania czynnika kosztowego
- AWS oferuje Dev Endpoint ze wszystkimi zainstalowanymi bibliotekami Spark, ale biorąc pod uwagę cenę, nie jest to opłacalne dla dużych zespołów programistycznych
- Dostępność usług AWS może być ograniczony dla niektórych użytkowników
Rozwiązanie
Rozwiązania dla AWS można rozwijać, testować w lokalnym środowisku, nie martwiąc się o dostępność czy czynnik kosztowy. W tym artykule zajmujemy się dwoma problemami -
- Lokalne debugowanie kodu PySpark bez użycia punktów końcowych deweloperskich AWS.
- Lokalna interakcja z usługami AWS
Oba problemy można rozwiązać za pomocą obrazów Dockera.
- Po pierwsze, eliminujemy potrzebę posiadania serwera w środowisku AWS, a zamiast tego obraz dokera działający na maszynie działa jako środowisko do wykonania kodu.
AWS udostępnia obraz piaskownicy, którego można używać w skryptach PySpark. Obraz Dockera można skonfigurować tak, aby wykonywał kod PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
- Gdy maszyna dokująca jest dostępna do wykonania kodu, potrzebna jest usługa, taka jak S3, do przechowywania (odczytu/zapisu) plików podczas budowania potoku ETL.
Interakcje z S3 można zastąpić Stos lokalny który zapewnia łatwą w użyciu platformę testową / kpiącą do tworzenia aplikacji w chmurze. Uruchamia środowisko testowe na komputerze lokalnym, które zapewnia te same funkcje i interfejsy API, co prawdziwe środowisko chmurowe AWS.
Póki co artykuł dotyczy budowy potoku ETL i korzystania z dostępnych usług. Jednak podobne podejście można dostosować do dowolnego przypadku użycia podczas pracy z usługami AWS, takimi jak SNS, SQS, CloudFormation, funkcje Lambda itp.
Podejście
- Używaj kontenerów Docker jako zdalnego tłumacza
- Uruchom sesję PySpark na kontenerach
- Rozkręć usługę S3 lokalnie za pomocą LocalStack
- Użyj kodu PySpark do odczytu i zapisu z segmentu S3 działającego na LocalStack
Wymagania wstępne
Na maszynie muszą być zainstalowane następujące narzędzia
- Doker
- Kod PyCharm Professional/VisualStudio
ustawienie
- Pobierz lub pociągnij obrazy dokera (docker pull )
- libs:glue_libs_1.0.0_image_01
- stos lokalny/stos lokalny
- Kontenery Docker mogą być używane jako zdalne interpretery w profesjonalnej wersji PyCharm.
Realizacja
Po zainstalowaniu Dockera i pobraniu obrazów na lokalną maszynę, zacznij ustawiać PyCharm z konfiguracjami, aby uruchomić kontenery.
- Utwórz plik docker-compose.yml
- Utwórz plik Docker
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- Użyj pliku wymagań z pakietami do zainstalowania
- Skonfiguruj zdalny interpreter języka Python
- Skonfiguruj interpreter Pythona przy użyciu pliku docker-compose.
- Wybierz „glue-service” w ustawieniach PyCharm Docker Compose.
- Plik Docker-compose tworzy i uruchamia kontenery dla obu obrazów
- LocalStack domyślnie działa na porcie 4566 i usługa S3 jest na nim włączona
Code
- Wymagane biblioteki do zaimportowania
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports
- Dodaj plik do zasobnika S3 działającego na LocalStack
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 to S3 działający lokalnie w kontenerze dokera
- Skonfiguruj sesję PySpark do odczytu z S3
- Sesja PySpark łączy się z S3 za pomocą dostarczonych fałszywych poświadczeń
- Możesz czytać z S3 bezpośrednio przy użyciu utworzonej sesji PySpark
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3
- Wreszcie, możliwe jest zapisywanie do S3 w dowolnym preferowanym formacie
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3
Po wykonaniu powyższych kroków możemy utworzyć fikcyjny plik csv z próbnymi danymi do testowania i powinieneś być dobry
- Dodaj plik do S3 (który działa na LocalStack)
- Czytaj z S3
- Odpisz do S3 jako parkiet
Powinieneś być w stanie uruchomić plik .py do wykonania i zostanie utworzona sesja PySpark, która może odczytywać z zasobnika S3, który działa lokalnie przy użyciu LocalStack API.
Dodatkowo możesz również sprawdzić, czy LocalStack działa z http://localhost:4566/health
LocalStack zapewnia również możliwość uruchamiania poleceń przy użyciu AWS CLI.
Wnioski
Korzystanie z Docker & Localstack zapewnia szybki i łatwy sposób uruchamiania kodu Pyspark, debugowania kontenerów i zapisu do S3, który działa lokalnie. Wszystko to bez konieczności łączenia się z jakąkolwiek usługą AWS.
Referencje:
- Punkt końcowy kleju: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
Doker: https://docs.docker.com/get-docker/ - PyCharm: https://www.jetbrains.com/pycharm/
- Zdalny tłumacz PyCharm: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- Stos lokalny: https://localstack.cloud
Bio: Subhash Sreenivasachar jest głównym inżynierem oprogramowania w zespole Epsilon Digital Experience, tworzącym rozwiązania inżynieryjne w celu rozwiązywania problemów związanych z nauką o danych, w szczególności personalizacji, i pomaga zwiększyć zwrot z inwestycji dla klientów.
Związane z:
Źródło: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html
- "
- &
- dostępność
- Wszystkie kategorie
- Amazonka
- analityka
- api
- Pszczoła
- aplikacje
- artykuł
- dostępność
- AWS
- budować
- Budowanie
- wyzwanie
- klientów
- Chmura
- Aplikacje w chmurze
- kod
- wspólny
- Pojemniki
- Tworzenie
- Listy uwierzytelniające
- dane
- Analityka danych
- nauka danych
- hurtownia danych
- Promocje
- głęboka nauka
- dev
- oprogramowania
- cyfrowy
- Dyrektor
- Doker
- Punkt końcowy
- inżynier
- Inżynieria
- Inżynierowie
- Środowisko
- itp
- Elastyczność
- Skupiać
- format
- Framework
- GitHub
- dobry
- GPU
- tutaj
- W jaki sposób
- HTTPS
- obraz
- Infrastruktura
- IT
- Klawisz
- duży
- prowadzić
- UCZYĆ SIĘ
- nauka
- miejscowy
- lokalnie
- ML
- monitorowanie
- oferta
- Online
- Inne
- personalizacja
- kluczowy
- Cena
- wycena
- rozwiązanie problemu
- Python
- wymagania
- run
- bieganie
- piaskownica
- nauka
- Naukowcy
- Bezserwerowe
- Usługi
- ustawienie
- Tworzenie
- Software Engineer
- Rozwiązania
- ROZWIĄZANIA
- początek
- sklep
- historie
- Techniczny
- test
- Testowanie
- czas
- Top
- Użytkownicy
- Magazyn
- X
- lat