Rozwój i testowanie potoków ETL dla AWS Locally

Węzeł źródłowy: 997665

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 -

  1. Lokalne debugowanie kodu PySpark bez użycia punktów końcowych deweloperskich AWS.
  2. Lokalna interakcja z usługami AWS

Oba problemy można rozwiązać za pomocą obrazów Dockera.

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

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

Nagłówek

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

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

  • Utwórz plik Docker

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

  • Użyj pliku wymagań z pakietami do zainstalowania

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

  • 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

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

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

 
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

Znak czasu:

Więcej z Knuggety