Organizowanie crawlerów AWS Glue za pomocą usługi AWS Step Functions
Organizacje codziennie generują terabajty danych w różnych formatach częściowo ustrukturyzowanych. Usługi AWS Glue i Amazon Athena mogą zapewnić prostszy i bardziej opłacalny sposób analizowania tych danych bez konieczności zarządzania infrastrukturą. Crawlery AWS Glue identyfikują schemat Twoich danych i zarządzają metadanymi wymaganymi do analizy danych w miejscu, bez konieczności przekształcania tych danych i ładowania do magazynu danych.
Ważny jest czas uruchomienia i zakończenia crawlerów. Musisz upewnić się, że crawler działa po zaktualizowaniu danych, a przed wysłaniem zapytania do Athena lub analizą za pomocą zadania AWS Glue. Jeśli nie, Twoja analiza może zawierać błędy lub zwrócić niekompletne wyniki.
W tym poście dowiesz się, jak korzystać z AWS Step Functions, usługi tzw. „visual workflow” typu low-code, która integruje się z ponad 220 usługami AWS. Usługa organizuje crawlery, aby kontrolować ich uruchomienie, potwierdzać ukończenie i łączyć je w kompleksowe, bezserwerowe workflowy przetwarzania danych.
Korzystanie z funkcji Step Functions do organizowania wielu crawlerów AWS Glue zapewnia szereg korzyści w porównaniu z implementacją rozwiązania bezpośrednio za pomocą kodu. Po pierwsze, worfklow zapewnia natychmiastowe wizualne zrozumienie aplikacji oraz wszelkich błędów, które mogą wystąpić podczas wykonywania. Zdolność funkcji Step Functions do uruchamiania zagnieżdżonych workflow’ów w stanie Map pomaga rozdzielić i ponownie wykorzystać komponenty aplikacji za pomocą natywnej iteracji tablicy. Na koniec stan oczekiwania Step Functions umożliwia workflow’owi okresowe sondowanie stanu zadania bez ponoszenia dodatkowych kosztów za czas oczekiwania na bezczynność.
Wdrażanie przykładu
W tym przykładzie tworzymy trzy zestawy danych w Amazon S3, a następnie używamy funkcji Step Functions do orkiestracji AWS Glue crawlers w celu analizowania zestawów danych i udostępniania ich do wykonywania zapytań za pomocą usługi Athena.
Aby rozpocząć poniższy przykład wdrożenia za pomocą AWS AWS CloudFormation, wykonaj następujące kroki:
- Pobierz plik template.yaml z tej strony.
- Zaloguj się do AWS Management Console i przejdź do AWS CloudFormation.
- Przejdź do Stacks -> Create stack i wybierz opcję With new resources (standard).
- Wybierz gotowy Template i kliknij Upload a template, a następnie Choose File i wybierz plik template.yaml pobrany w kroku 1 i wybierz Next.
- Wprowadź nazwę stosu (stack name), na przykład glue-stepfunctions-demo, i wybierz Next.
- Wybierz Next, zaznacz pola potwierdzenia w sekcji Capabilities and transforms section, a następnie wybierz Create stack.
- Po wdrożeniu status aktualizuje się do CREATE_COMPLETE.
Tworzenie zbiorów danych
Przejdź do Step Functions w konsoli AWS Management Console i wybierz z listy automat stanów tworzenia zestawu danych. Ten automat stanów używa Express Workflows i stanu Parallel do jednoczesnego tworzenia trzech zestawów danych w S3. Pierwsze dwa zbiory danych zawierają informacje odpowiednio według artybutów user i location oraz zawierają pliki w okresie 5 lat od 2016 do 2020 roku. Trzeci zbiór danych to prostsze, pełne zestawienie danych według atrybutu location.
Aby utworzyć zestawy danych, wybierz opcję Start execution z paska narzędzi automatu stanu create-dataset, a następnie ponownie wybierz opcję Start execution w oknie dialogowym. To uruchamia automat stanów i tworzy zestawy danych w S3.
Przejdź do konsoli S3 i wyświetl glue-demo-databucket utworzony dla tego przykładu. W tym buckecie, w folderze o nazwie data, znajdują się trzy podfoldery, z których każdy zawiera zbiór danych.
Folder all-time-location-summarie zawiera zestaw plików JSON, po jednym dla każdego location.
Foldery daily-user-summaries i daily-location-summaries zawierają strukturę folderów z zagnieżdżonymi folderami dla każdego roku, miesiąca i dnia. Oprócz ułatwienia nawigacji za pomocą konsoli, ta struktura folderów zawiera wskazówki dla AWS Glue, których może użyć do partycjonowania tego zestawu danych i zwiększenia wydajności wykonywania zapytań.
Crawling
Aktualnie używasz crawlerów AWS Glue do analizowania tych zestawów danych i udostępniania ich do zapytań. Przejdź do konsoli AWS Glue, wybierz Crawlers, aby wyświetlić listę crawlerów, które utworzyłeś podczas wdrażania tego przykładu. Wybierz crawler daily-user-summaries, aby wyświetlić szczegóły i zwróć uwagę, że mają one przypisane tagi wskazujące metadane, takie jak typ danych i czy zestaw danych ma wartość is-partitioned.
Teraz wróć do konsoli Step Functions i wyświetl automat stanu run-crawlers-with-tags. Ten automat stanów korzysta z integracji usługi AWS SDK, aby uzyskać listę wszystkich crawlerów pasujących do wprowadzonych kryteriów tagów. Następnie używa tzw. map state i zoptymalizowanej integracji usług dla funkcji Step Functions do równoczesnego wykonywania automatu stanu run-crawler dla każdego z pasujących crawlerów. Automat stanu run-crawler uruchamia każdy crawler i monitoruje jego stan do czasu zakończenia jego działania. Po zakończeniu każdego z poszczególnych crawlerów, kończy się również automat stanu run-crawlers-with-tags.
Aby zainicjować crawlery, należy:
- Wybierz opcję Start execution na górze strony podczas przeglądania automatu stanu run-crawlers-with-tags.
- Podaj następujące dane jako Input
{"tags": {"datatype": "json"}} - Wybierz Start execution.
Po 2-3 minutach wykonanie kończy się statusem Succeeded po zakończeniu wszystkich trzech crawlerów. W tym czasie możesz przejść do automatu stanu run-crawler, aby wyświetlić poszczególne, zagnieżdżone wykonania każdego crawlera lub do konsoli AWS Glue, aby zobaczyć status crawlerów.
Zapytanie o dane za pomocą Amazon Athena
Przejdź do konsoli Athena, gdzie możesz zobaczyć bazy danych i tabele utworzone przez Twoje crawlery. Zwróć uwagę, że AWS Glue rozpoznał schemat partycjonowania i dołączył pola dla year, month i date, oprócz pól user i usage dla danych zawartych w plikach JSON.
Jeśli nie korzystałeś wcześniej z usługi Athena na tym koncie, zobaczysz komunikat z prośbą o ustawienie lokalizacji wyników zapytania. Wybierz View settings -> Manage ->Browse S3 i wybierz bucket athena-results utworzony podczas wdrażania przykładu. Następnie kliknij Save i wróc do Edytora, aby kontynuować.
Możesz teraz uruchamiać zapytania, takie jak poniższe, aby obliczyć łączne użycie dla wszystkich użytkowników w ciągu 5 lat.
SELECT SUM(usage) all_time_usage FROM “daily_user_summaries”
Możesz także dodać filtry, jak pokazano w poniższym przykładzie, które ograniczają wyniki do tych z 2016 roku.
SELECT SUM(usage) all_time_usage FROM “daily_user_summaries” WHERE year = ‘2016’
Zauważ, że to drugie zapytanie przeskanowało tylko 17% więcej danych (133 KB w porównaniu z 797 KB) i zostało zakończone szybciej. Dzieje się tak, ponieważ Athena użyła informacji o partycjonowaniu, aby uniknąć wysyłania zapytań do pełnego zestawu danych. Chociaż różnice w tym przykładzie są niewielkie, w przypadku rzeczywistych zestawów danych zawierających terabajty danych, oszczędności kosztów i opóźnień wynikające z partycjonowania danych mogą być znaczne.
Wadą schematu partycjonowania jest to, że nowe foldery nie są uwzględniane w wynikach zapytania, dopóki nie dodasz nowych partycji. Ponowne uruchomienie crawlera identyfikuje i dodaje nowe partycje, a użycie usługi Step Functions do zorganizowania tych crawlerów upraszcza to zadanie.
Rozszerzenie przykładu
Możesz użyć tych przykładowych automatów stanu w postaci, w jakiej znajdują się na kontach AWS, aby zarządzać istniejącymi crawlerami. Możesz używać powiadomień o zdarzeniach Amazon S3 z Amazon EventBridge do uruchamiania crawlerów na podstawie zmian danych. Dzięki zoptymalizowanej integracji usług dla Amazon Athena możesz rozszerzyć swoje worfklow’y o wykonywanie zapytań w tych zestawach danych zawierających crawlery. Możesz użyć tych przykładów, aby zintegrować wykonywanie crawlera z kompleksowymi workflow’ami przetwarzania danych, tworząc niezawodne, podlegające kontroli workflowu od przetworzenia po analizę.
Podsumowanie
W tym poście przedstawiliśmy, jak używać Step Functions do orkiestracji crawlerów AWS Glue. Możesz wdrożyć podany przykład, który generuje trzy zestawy danych, a następnie używa funkcji Step Functions do uruchamiania i koordynowania crawlerów, które analizują te dane i udostępniają je do zapytań za pomocą Athena.
Aby dowiedzieć się więcej o Step Functions, odwiedź Serverless Land.
Źródło: AWS