Amazon DEA-C01: Transformacja i przetwarzanie danych — Przewodnik do nauki
Część Amazon Data Engineer Associate DEA-C01 — Przewodnik do nauki. Ćwicz ze zweryfikowanymi odpowiedziami w centrum egzaminów Amazon, albo rozwiąż testy na czas na ExamRoll.io.
Ta domena obejmuje usługi i wzorce AWS używane do czyszczenia, transformacji i przygotowywania danych do analityki i uczenia maszynowego na dużą skalę. Skupia się na wyborze odpowiednich zasobów obliczeniowych i narzędzi (Glue, Lambda, EMR, DataBrew) w oparciu o wolumen danych, wymagania dotyczące opóźnień i ograniczenia kosztowe. Zrozumienie limitów usług, parametrów konfiguracyjnych zadań oraz interakcji między formatami danych a katalogami jest kluczowe do budowania niezawodnych, przyrostowych potoków danych.
Zadania ETL w AWS Glue (Spark i Python shell)
Zadania Glue Spark to podstawowy wybór dla rozproszonych zadań ETL na dużą skalę: działają na zarządzanym przez AWS Glue środowisku Apache Spark, używają GlueContext i operują na typach DynamicFrame oraz Spark DataFrame. Konfiguruje się je za pomocą konsoli lub CLI, podając typ zadania „glueetl”, workerType (G.1X, G.2X, G.4X) i NumberOfWorkers; uruchamianie przez CLI:
undefined
. Używaj API DynamicFrame (
undefined
,
undefined
), gdy potrzebujesz transformacji elastycznych pod względem schematu, wbudowanych transformacji (Relationalize, Unnest) i automatycznego przetwarzania danych częściowo ustrukturyzowanych; konwertuj do Spark DataFrame za pomocą
undefined
, gdy potrzebujesz Spark SQL, bardziej wydajnych złączeń (joins) lub niestandardowych funkcji UDF.
Zadania Glue Python shell używają typu zadania „pythonshell” do lekkich zadań skryptowych i operacji na płaszczyźnie sterowania. Działają na pojedynczej jednostce DPU (1 DPU) z ograniczoną równoległością i najlepiej nadają się do prostych manipulacji na plikach, aktualizacji metadanych lub orkiestracji. Konfiguracja za pomocą
undefined
i uruchamianie przez
undefined
. Pamiętaj, że zadania Python shell mają limit 1 DPU — do dużych zbiorów danych używaj Sparka.
Zakładki (bookmarks) w zadaniach Glue umożliwiają przetwarzanie przyrostowe poprzez śledzenie wcześniej przetworzonych obiektów i partycji w S3. Włącz zakładki w konfiguracji zadania lub podczas jego uruchamiania:
undefined
. Zakładki działają dla źródeł opartych na S3 wykorzystujących wbudowane konektory; źródła JDBC domyślnie nie obsługują zakładek i wymagają niestandardowego mechanizmu watermarking lub przechowywania stanu.
Glue obsługuje teraz ExecutionClass FLEX dla zoptymalizowanych kosztowo, niepilnych zadań. Uruchom zadanie za pomocą
undefined
, aby pozwolić Glue na zaplanowanie zadania po niższym koszcie, z mniej rygorystycznymi umowami SLA dotyczącymi czasu startu. Używaj FLEX do wsadowego uzupełniania danych (backfills) i zadań niewrażliwych na opóźnienia; używaj STANDARD dla przewidywalnych opóźnień.
Kryteria decyzyjne — szybkie porównanie:
- DynamicFrame vs Spark DataFrame
- Używaj DynamicFrame podczas wczytywania częściowo ustrukturyzowanych danych JSON/Parquet ze zmieniającym się schematem (schema drift), wykorzystując
undefined
,
undefined
i transformacje Glue.
- Używaj Spark DataFrame, gdy potrzebujesz wydajności Spark SQL, złożonych złączeń (joins), funkcji okienkowych i bibliotek Spark firm trzecich.
- Konwertuj między nimi za pomocą
undefined
oraz
undefined
.
- Glue Spark vs Python shell
- Wybierz Sparka do wielowęzłowych, rozproszonych zadań ETL na dużych zbiorach danych oraz gdy używasz integracji z Glue Catalog na dużą skalę.
- Wybierz Python shell do małych, szybkich zadań lub kroków orkiestracji, które mieszczą się w ramach 1 DPU.
AWS Lambda do lekkich transformacji
Lambda jest idealna do sterowanych zdarzeniami, lekkich transformacji o niskim opóźnieniu, wyzwalanych bezpośrednio przez S3, Kinesis lub EventBridge. Typowe zastosowania to walidacja plików, ekstrakcja metadanych, konwersja małych plików z JSON na CSV lub przetwarzanie strumieniowe rekordów. Skonfiguruj pamięć i limit czasu wykonania (timeout) za pomocą
undefined
. Można ustawić Provisioned Concurrency za pomocą
undefined
, aby zminimalizować zimne starty (cold starts) w potokach strumieniowych wrażliwych na opóźnienia.
Należy pamiętać o limitach Lambda w kontekście przetwarzania danych: maksymalny czas wykonania 15 minut, 10 GB pamięci (10 240 MB) i tylko 512 MB efemerycznej przestrzeni dyskowej /tmp. W przypadku przetwarzania większych plików, należy stosować przetwarzanie łańcuchowe (dzielenie plików), przesyłać je do S3 i wywoływać zadanie Glue lub EMR, albo używać przetwarzania wieloczęściowego z AWS Step Functions. Używaj zmiennych środowiskowych do przechowywania małych konfiguracji, a polityk ról IAM do ścisłego nadawania minimalnych wymaganych uprawnień (least privilege).
Kryteria decyzyjne — kiedy wybrać Lambdę:
- Używaj Lambdy, gdy przetwarzanie pojedynczego wywołania mieści się w limitach 15 minut, 10 GB pamięci i 512 MB /tmp, oraz gdy wymagane jest opóźnienie od poniżej sekundy do kilku sekund.
- Unikaj używania Lambdy do dużych, długotrwałych transformacji lub transformacji wymagających dużej ilości pamięci; zamiast tego użyj Glue Spark lub EMR.
Amazon EMR do przetwarzania na dużą skalę
EMR to główne narzędzie do konfigurowalnego przetwarzania big data na dużą skalę (Spark, Hadoop, Presto, Flink), gdy wymagana jest kontrola na poziomie klastra, niestandardowe akcje bootstrapowe lub specjalistyczne biblioteki. Klastry tworzy się za pomocą CLI poleceniem aws emr create-cluster, wybierając opcję –instance-groups lub –instance-fleets. Floty instancji (Instance fleets) zapewniają elastyczne kombinacje typów instancji oraz połączenia instancji spot i na żądanie (On-Demand); grupy instancji (instance groups) są prostsze i składają się z grup o stałym rozmiarze.
Wzorce klastrów EMR do rozważenia:
- Klastry tymczasowe: uruchamiane z opcją –auto-terminate, przesyłają kroki (steps), dzięki czemu klaster kończy działanie po zakończeniu kroków. Dobre do kontroli kosztów, ale efemeryczny HDFS i stan lokalny zostaną utracone po zakończeniu pracy.
- Klastry długo działające: nie kończą pracy automatycznie; używane do interaktywnych obciążeń, trwałego HDFS lub gdy wiele małych zadań korzysta z rozgrzewania JVM. Krytyczne dane należy przechowywać w S3 lub w pamięci masowej Hadoop opartej na EBS, jeśli przewiduje się zakończenie pracy klastra.
Przykłady konfiguracji:
- CLI dla grupy instancji: aws emr create-cluster –name Prod –release-label emr-6.6.0 –use-default-roles –instance-groups InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1 InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=4
- CLI dla floty instancji używa –instance-fleets z alokacjami OnDemand/Spot i wieloma typami instancji w celu zapewnienia odporności i optymalizacji kosztów.
Używaj EMR, gdy potrzebujesz pełnej kontroli nad komponentami ekosystemu Hadoop, niestandardowych skryptów bootstrapowych lub trwałego HDFS dla danych pośrednich; w przeciwnym razie Glue Spark jest prostszy w przypadku zarządzanego ETL opartego na Sparku, który integruje się z Glue Data Catalog.
Glue DataBrew i transformacje wizualne
Glue DataBrew to wizualne narzędzie typu no-code/low-code do profilowania, czyszczenia i transformacji danych, skierowane do analityków danych i inżynierów pracujących interaktywnie. Utwórz zbiór danych z S3 lub Glue Catalog, zbuduj przepis (recipe) transformacji w konsoli, wyświetl podgląd na próbce i uruchom zadania, aby zastosować przepisy na dużą skalę. Zadania DataBrew można harmonogramować lub uruchamiać za pomocą CLI poleceniem aws databrew start-job-run –name my-databrew-job.
DataBrew jest zoptymalizowany pod kątem zadań przygotowania danych, takich jak standaryzacja, deduplikacja, konwersja typów i transformacje na poziomie kolumn za pomocą wbudowanych funkcji. Integruje się z Glue Catalog i zapisuje wyniki do S3. Wybierz DataBrew, gdy użytkownicy biznesowi potrzebują samoobsługowego czyszczenia i szybkiego profilowania; w przypadku ciężkiej logiki transformacji, złożonych operacji join lub bardzo dużych zbiorów danych, preferuj Glue Spark lub EMR.
Porównanie transformacji wizualnych i opartych na kodzie:
- Glue DataBrew
- Zalety: szybkie profilowanie, oparte na przepisach (recipes), osoby niebędące programistami mogą budować potoki, zintegrowane harmonogramowanie.
- Wady: nie nadaje się do bardzo dużych lub wysoce złożonych rozproszonych operacji join i niestandardowych bibliotek.
- Glue Spark / EMR
- Zalety: pełna kontrola programistyczna, obsługa ogromnych zbiorów danych, wsparcie dla bibliotek firm trzecich.
- Wady: wymaga umiejętności deweloperskich i większej konfiguracji.
Częste pułapki i kryteria decyzyjne
- Zakładanie, że zakładki zadań (job bookmarks) Glue działają dla źródeł JDBC — zakładki śledzą tylko stan obiektów/partycji S3; do przyrostowego ładowania danych z JDBC używaj kolumn znaku wodnego (watermark), change-data-capture lub przechowuj postęp w DynamoDB/S3.
- Traktowanie tymczasowych klastrów EMR jak systemów stanowych — klastry tymczasowe kończą działanie po wykonaniu kroków i tracą HDFS; przechowuj dane pośrednie w S3 lub używaj woluminów EBS do trwałego przechowywania.
- Ignorowanie zimnych startów (cold starts) Lambda w potokach strumieniowych — zimne starty zwiększają opóźnienia; ograniczaj je za pomocą alokowanej współbieżności (provisioned concurrency) dla krytycznych ścieżek lub używaj długo działających zasobów obliczeniowych dla rygorystycznych wymagań niskiego opóźnienia.
- Uruchamianie dużych transformacji w powłoce Glue Python shell — zadania Python shell są ograniczone do 1 DPU; dla dużych zbiorów danych używaj zadań Glue Spark z odpowiednimi workerType/NumberOfWorkers.
- Błędna konfiguracja typów instancji EMR: wybieraj floty instancji (instance fleets) dla oszczędności i elastyczności z instancjami spot; używaj grup instancji (instance groups), gdy potrzebujesz przewidywalnego składu instancji.
- Nadużywanie Glue Flex dla pilnych zadań — FLEX obniża koszty, ale może opóźnić czas rozpoczęcia; używaj STANDARD dla przewidywalnego czasu rozpoczęcia i wykonania.
Praktyczny problem: Scenariusz użycia
Firma AcmeRetail przetwarza codzienne nocne pliki Parquet z danymi o ścieżkach kliknięć (clickstream) do ujednoliconej tabeli aktywności klientów i chce wprowadzić przetwarzanie przyrostowe, aby uniknąć ponownego przetwarzania danych z wielu miesięcy, jednocześnie utrzymując niskie koszty dla niepilnego uzupełniania danych historycznych.
- Użyj układu partycjonowanego w S3 (year=/month=/day=) i zarejestruj zbiór danych w Glue Data Catalog.
- Utwórz zadanie Glue Spark (glueetl), które odczytuje dane za pomocą
undefined
w celu zapewnienia elastyczności schematu, stosuje mapowania, konwertuje do DataFrame dla złożonych operacji join i zapisuje z powrotem do S3 w formie partycjonowanego Parquet. 3. Włącz zakładki zadań Glue (job-bookmark-enable) dla codziennych nocnych uruchomień, aby przetwarzać tylko nowe partycje; dla źródeł wzbogacających dane z JDBC, zaimplementuj kolumny znaku wodnego (watermark) przechowywane w DynamoDB, aby śledzić maksymalny przetworzony znacznik czasu. 4. Dla rutynowych nocnych uruchomień użyj ExecutionClass=STANDARD; dla niepilnego, historycznego ponownego przetwarzania, przesyłaj uruchomienia z –execution-class FLEX, aby zaoszczędzić na kosztach. 5. Monitoruj za pomocą metryk CloudWatch i ustawiaj alarmy na wypadek awarii zadań; dla bardzo dużej skali lub niestandardowych bibliotek, rozważ użycie tymczasowych klastrów EMR, które zapisują wyniki pośrednie do S3 i kończą pracę automatycznie.
Uzasadnienie: To podejście wykorzystuje zarządzany Spark w Glue do skalowalnych transformacji i DynamicFrames dla danych częściowo ustrukturyzowanych, używa zakładek zadań do przyrostowego przetwarzania danych z S3 oraz wykorzystuje FLEX do redukcji kosztów uzupełniania danych historycznych — zachowując optymalizację kosztów, niezawodność i prostotę operacyjną.
← Katalogowanie danych i zarządzanie metadanymi · Wszystkie domeny · Orkiestracja danych i zarządzanie przepływami pracy →
Przećwicz te pytania → · Testy na czas na ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Zdaj egzamin →