Uprość i przyspiesz działanie aplikacji Apache Spark na danych Amazon Redshift dzięki integracji Amazon Redshift dla Apache Spark

Uprość i przyspiesz działanie aplikacji Apache Spark na danych Amazon Redshift dzięki integracji Amazon Redshift dla Apache Spark

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

Klienci używają Amazonka Przesunięcie ku czerwieni do prowadzenia krytycznych analiz biznesowych na petabajtach ustrukturyzowanych i częściowo ustrukturyzowanych danych. Apache Spark to popularna platforma, której można używać do tworzenia aplikacji do przypadków użycia, takich jak ETL (wyodrębnianie, przekształcanie i ładowanie), analityka interaktywna i uczenie maszynowe (ML). Apache Spark umożliwia tworzenie aplikacji w różnych językach, takich jak Java, Scala i Python, uzyskując dostęp do danych w hurtowni danych Amazon Redshift.

Integracja Amazon Redshift dla Apache Spark pomaga programistom bezproblemowo tworzyć i uruchamiać aplikacje Apache Spark na danych Amazon Redshift. Deweloperzy mogą korzystać z usług analitycznych AWS i ML, takich jak Amazon EMR, Klej AWS, Amazon Sage Maker do bezproblemowego tworzenia aplikacji Apache Spark, które odczytują i zapisują w hurtowni danych Amazon Redshift. Możesz to zrobić bez uszczerbku dla wydajności aplikacji lub spójności transakcyjnej danych.

W tym poście omawiamy, dlaczego integracja Amazon Redshift dla Apache Spark jest krytyczna i wydajna dla analityki i uczenia maszynowego. Ponadto omawiamy przypadki użycia, które wykorzystują integrację Amazon Redshift z Apache Spark, aby zwiększyć wpływ na biznes. Na koniec przeprowadzimy Cię krok po kroku przez przykłady korzystania z tego oficjalnego łącznika AWS w aplikacji Apache Spark.

Integracja Amazon Redshift dla Apache Spark

Integracja Amazon Redshift dla Apache Spark minimalizuje uciążliwy i często ręczny proces konfigurowania złącza spark-redshift (wersja społecznościowa) i skraca czas potrzebny na przygotowanie się do zadań analitycznych i ML. Wystarczy określić połączenie z hurtownią danych, aby w ciągu kilku minut rozpocząć pracę z danymi Amazon Redshift z aplikacji opartych na Apache Spark.

Możesz użyć kilku funkcji wypychania w dół dla operacji, takich jak sortowanie, agregowanie, ograniczanie, łączenie i funkcje skalarne, dzięki czemu tylko odpowiednie dane są przenoszone z magazynu danych Amazon Redshift do zużywającej aplikacji Apache Spark. Pozwala to poprawić wydajność aplikacji. Administratorzy Amazon Redshift mogą łatwo identyfikować kod SQL generowany przez aplikacje oparte na platformie Spark. W tym poście pokazujemy, jak można znaleźć kod SQL wygenerowany przez zadanie Apache Spark.

Ponadto integracja Amazon Redshift dla Apache Spark wykorzystuje format pliku Parquet podczas umieszczania danych w katalogu tymczasowym. Amazon Redshift używa instrukcji UNLOAD SQL do przechowywania tych danych tymczasowych Usługa Amazon Simple Storage (Amazon S3). Aplikacja Apache Spark pobiera wyniki z katalogu tymczasowego (przechowywanego w formacie pliku Parquet), co poprawia wydajność.

Możesz także pomóc w zwiększeniu bezpieczeństwa swoich aplikacji, używając AWS Zarządzanie tożsamością i dostępem (IAM), aby połączyć się z Amazon Redshift.

Integracja Amazon Redshift dla Apache Spark jest oparta na złączu spark-redshift (wersja społecznościowa) i poprawia ją pod kątem wydajności i bezpieczeństwa, pomagając uzyskać nawet 10-krotnie wyższą wydajność aplikacji.

Przypadki użycia integracji Amazon Redshift z Apache Spark

W naszym przypadku kierownictwo firmy opartej na produkcie chce poznać sprzedaż każdego produktu na wielu rynkach. Ponieważ sprzedaż firmy zmienia się dynamicznie, śledzenie sprzedaży na wielu rynkach stało się wyzwaniem dla kierownictwa. Jednak ogólna sprzedaż spada, a kierownictwo firmy chce dowiedzieć się, które rynki nie radzą sobie, aby móc skierować na te rynki kampanie promocyjne.

W przypadku sprzedaży na wielu rynkach dane dotyczące sprzedaży produktów, takie jak zamówienia, transakcje i dane dotyczące przesyłek, są dostępne w usłudze Amazon S3 w usłudze Data Lake. Zespół inżynierów danych może używać Apache Spark z Amazon EMR lub AWS Glue do analizy tych danych w Amazon S3.

Dane inwentaryzacyjne są dostępne w Amazon Redshift. Podobnie zespół inżynierów danych może analizować te dane za pomocą Apache Spark przy użyciu zadania Amazon EMR lub AWS Glue, korzystając z integracji Amazon Redshift dla Apache Spark w celu wykonywania agregacji i transformacji. Zagregowany i przekształcony zestaw danych można zapisać z powrotem w Amazon Redshift przy użyciu integracji Amazon Redshift dla Apache Spark.

Korzystanie z rozproszonej struktury, takiej jak Apache Spark, z integracją Amazon Redshift dla Apache Spark, może zapewnić widoczność jeziora danych i hurtowni danych w celu generowania szczegółowych informacji o sprzedaży. Te spostrzeżenia mogą być udostępniane interesariuszom biznesowym i użytkownikom biznesowym w Amazon Redshift, aby podejmować świadome decyzje dotyczące prowadzenia ukierunkowanych promocji dla segmentów rynku o niskich dochodach.

Dodatkowo możemy skorzystać z integracji Amazon Redshift z Apache Spark w następujących przypadkach użycia:

  • Klient Amazon EMR lub AWS Glue, który uruchamia zadania Apache Spark, chce przekształcić dane i zapisać je w Amazon Redshift w ramach swojego potoku ETL
  • Klient ML używa Apache Spark z SageMaker do inżynierii funkcji w celu uzyskiwania dostępu i przekształcania danych w Amazon Redshift
  • Klient Amazon EMR, AWS Glue lub SageMaker używa Apache Spark do interaktywnej analizy danych z danymi o Amazon Redshift z notebooków

Przykłady integracji Amazon Redshift dla Apache Spark w aplikacji Apache Spark

W tym poście pokazujemy, jak połączyć Amazon Redshift z Amazon EMR Elastyczna chmura obliczeniowa Amazon (Amazonka EC2), Bezserwerowe Amazon EMRi AWS Glue przy użyciu wspólnego skryptu. W poniższym przykładowym kodzie generujemy raport przedstawiający kwartalną sprzedaż za rok 2008. W tym celu łączymy dwie tabele Amazon Redshift za pomocą Apache Spark DataFrame, uruchamiamy predykat pushdown, agregujemy i sortujemy dane oraz zapisujemy przekształcone dane z powrotem do Amazon Redshift. Skrypt wykorzystuje PySpark

Skrypt wykorzystuje Uwierzytelnianie oparte na IAM dla Amazon Redshift. Role IAM używane przez Amazon EMR i AWS Glue powinny mieć odpowiednie uprawnienia do uwierzytelniania Amazon Redshift oraz dostęp do zasobnika S3 do tymczasowego przechowywania danych.

Poniższe przykładowe zasady umożliwiają roli IAM wywoływanie GetClusterCredentials operacje:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:<aws_region_name>:xxxxxxxxxxxx:dbuser:*/temp_*" }
}

Poniższa przykładowa polityka umożliwia dostęp do zasobnika S3 do tymczasowego przechowywania danych:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::<s3_bucket_name>" } ]
}

Pełny skrypt jest następujący:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col # Initiate Apache Spark session
spark = SparkSession .builder .appName("SparkRedshiftConnector") .enableHiveSupport() .getOrCreate() # Set connection options for Amazon Redshift
jdbc_iam_url = "jdbc:redshift:iam://redshift-spark-connector-1.xxxxxxxxxxx.<aws_region_name>.redshift.amazonaws.com:5439/sample_data_dev"
temp_dir = 's3://<s3_bucket_name>/redshift-temp-dir/'
aws_role = 'arn:aws:iam::xxxxxxxxxxxx:role/redshift-s3' # Set query group for the query. More details on Amazon Redshift WLM https://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html
queryGroup = "emr-redshift"
jdbc_iam_url_withQueryGroup = jdbc_iam_url+'?queryGroup='+queryGroup # Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url_withQueryGroup+';user='+userName # Define the Amazon Redshift context
redshiftOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Create the sales DataFrame from Amazon Redshift table using io.github.spark_redshift_community.spark.redshift class
sales_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.sales") .load()
) # Create the date Data Frame from Amazon Redshift table
date_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.date") .load()
) # Assign a Data Frame to the above output which will be written back to Amazon Redshift
output_df= sales_df.join(date_df, sales_df.dateid == date_df.dateid, 'inner').where( col("year") == 2008).groupBy("qtr").sum("qtysold").select( col("qtr"), col("sum(qtysold)")).sort(["qtr"], ascending=[1]).withColumnRenamed("sum(qtysold)","total_quantity_sold") # Display the output
output_df.show() ## Lets drop the queryGroup for easy validation of push down queries
# Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url+'?user='+userName # Define the Amazon Redshift context
redshiftWriteOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Write the Data Frame back to Amazon Redshift
output_df.write .format("io.github.spark_redshift_community.spark.redshift") .mode("overwrite") .options(**redshiftWriteOptions) .option("dbtable", "tickit.test") .save()

Jeśli planujesz użyć powyższego skryptu w swoim środowisku, pamiętaj o zastąpieniu wartości następujących zmiennych wartościami odpowiednimi dla Twojego środowiska: jdbc_iam_url, temp_dir, aws_role.

W następnej sekcji przejdziemy przez kolejne kroki, aby uruchomić ten skrypt w celu agregacji przykładowego zestawu danych, który jest udostępniany w usłudze Amazon Redshift.

Wymagania wstępne

Zanim zaczniemy, upewnij się, że spełnione są następujące wymagania wstępne:

Wdrażaj zasoby za pomocą AWS CloudFormation

Wykonaj następujące kroki, aby wdrożyć stos CloudFormation:

  1. Zaloguj się do Konsola zarządzania AWS, a następnie uruchom stos CloudFormation:
    BDB-2063-uruchomienie-cloudformation-stos

Możesz również pobierz szablon CloudFormation do tworzenia zasobów wymienionych w tym poście za pomocą infrastruktury jako kodu (IaC). Użyj tego szablonu podczas uruchamiania nowego stosu CloudFormation.

  1. Przewiń w dół strony, aby wybrać Przyjmuję do wiadomości, że AWS CloudFormation może tworzyć zasoby IAM dla Nasze możliwości, A następnie wybierz Utwórz stos.

Proces tworzenia stosu trwa od 15 do 20 minut. Szablon CloudFormation tworzy następujące zasoby:

    • Amazon VPC z potrzebnymi podsieciami, tablicami tras i bramą NAT
    • Wiadro S3 z imieniem redshift-spark-databucket-xxxxxxx (zwróć uwagę, że xxxxxxx to losowy ciąg, dzięki któremu nazwa zasobnika jest niepowtarzalna)
    • Klaster Amazon Redshift z przykładowymi danymi załadowanymi do bazy danych dev i głównym użytkownikiem redshiftmasteruser. Na potrzeby tego wpisu na blogu, redshiftmasteruser z uprawnieniami administracyjnymi jest używany. Zaleca się jednak używanie użytkownika z precyzyjną kontrolą dostępu w środowisku produkcyjnym.
    • Rola IAM do wykorzystania w Amazon Redshift z możliwością żądania tymczasowych poświadczeń z bazy danych programistów klastra Amazon Redshift
    • Studio Amazon EMR z wymaganymi rolami IAM
    • Wersja 6.9.0 Amazon EMR w klastrze EC2 z wymaganymi rolami IAM
    • Aplikacja Amazon EMR Serverless w wersji 6.9.0
    • Połączenie AWS Glue i zadanie AWS Glue w wersji 4.0
    • A Notatnik Jupyter do uruchomienia przy użyciu Amazon EMR Studio przy użyciu Amazon EMR w klastrze EC2
    • Skrypt PySpark do uruchamiania przy użyciu Amazon EMR Studio i Amazon EMR Serverless
  1. Po zakończeniu tworzenia stosu wybierz nazwę stosu redshift-spark i przejdź do Wyjścia

Wykorzystamy te wartości wyjściowe w dalszej części tego postu.

W kolejnych sekcjach pokazujemy kroki integracji Amazon Redshift dla Apache Spark z Amazon EMR na Amazon EC2, Amazon EMR Serverless i AWS Glue.

Użyj integracji Amazon Redshift z Apache Spark na Amazon EMR na EC2

Począwszy od wersji Amazon EMR 6.9.0 i nowszych, złącze korzystające z integracji Amazon Redshift dla Apache Spark i sterownik Amazon Redshift JDBC są dostępne lokalnie w Amazon EMR. Pliki te znajdują się pod /usr/share/aws/redshift/ informator. Jednak w poprzednich wersjach Amazon EMR, społeczność wersja spark-redshift złącze jest dostępna.

Poniższy przykład pokazuje, jak połączyć Amazon Redshift przy użyciu jądra PySpark za pośrednictwem pliku an Studio Amazon EMR zeszyt. Stos CloudFormation stworzył Amazon EMR Studio, Amazon EMR w klastrze EC2 i dostępny do uruchomienia notebook Jupyter. Aby przejść przez ten przykład, wykonaj następujące kroki:

  1. Pobierz notatnik Jupyter udostępniony w segmencie S3:
    • W danych wyjściowych stosu CloudFormation poszukaj wartości for EMRStudioNotebook, co powinno wskazywać na redshift-spark-emr.ipynb notebook dostępny w kubełku S3.
    • Wybierz link lub otwórz link w nowej karcie, kopiując adres URL notatnika.
    • Po otwarciu linku pobierz notatnik, wybierając Do pobrania, co spowoduje zapisanie pliku lokalnie na komputerze.
  1. Uzyskaj dostęp do Amazon EMR Studio, wybierając lub kopiując łącze podane w danych wyjściowych stosu CloudFormation dla klucza EMRStudioURL.
  2. W okienku nawigacji wybierz Przestrzenie robocze.
  3. Dodaj Utwórz obszar roboczy.
  4. Na przykład podaj nazwę obszaru roboczego redshift-spark.
  5. rozwiń Zaawansowana konfiguracja sekcję i wybierz Dołącz Workspace do klastra EMR.
  6. Pod Dołącz do klastra EMR, wybierz klaster EMR o podanej nazwie emrCluster-Redshift-Spark.
  7. Dodaj Utwórz obszar roboczy.
  8. Po utworzeniu obszaru roboczego Amazon EMR Studio i uzyskaniu stanu Załączono można uzyskać dostęp do obszaru roboczego, wybierając nazwę obszaru roboczego.

To powinno otworzyć obszar roboczy w nowej karcie. Pamiętaj, że jeśli masz blokadę wyskakujących okienek, być może będziesz musiał zezwolić Obszarowi roboczemu na otwarcie lub wyłączenie blokowania wyskakujących okienek.

W przestrzeni roboczej Amazon EMR Studio przesyłamy teraz pobrany wcześniej notatnik Jupyter.

  1. Dodaj Prześlij przeglądać lokalny system plików i przesyłać notatnik Jupyter (redshift-spark-emr.ipynb).
  2. Wybierz (kliknij dwukrotnie) plik redshift-spark-emr.ipynb notatnik w obszarze roboczym, aby otworzyć notatnik.

Notatnik zawiera szczegółowe informacje o różnych zadaniach, które wykonuje. Zauważ, że w sekcji Zdefiniuj zmienne do połączenia z klastrem Amazon Redshift, nie musisz aktualizować wartości dla jdbc_iam_url, temp_dir, aws_role ponieważ są one aktualizowane dla Ciebie przez AWS CloudFormation. AWS CloudFormation wykonał również kroki wymienione w Wymagania wstępne sekcji notebooka.

Możesz teraz uruchomić notatnik.

  1. Uruchom poszczególne komórki, zaznaczając je, a następnie wybierając Grać.

Możesz także użyć kombinacji klawiszy Shift + Enter or Shift+Return. Alternatywnie możesz uruchomić wszystkie komórki, wybierając Uruchom wszystkie komórki na run menu.

  1. Znajdź operację przesuwania predykatu wykonaną w klastrze Amazon Redshift przez integrację Amazon Redshift dla Apache Spark.

Możemy również zobaczyć tymczasowe dane przechowywane na Amazon S3 w zoptymalizowanym formacie Parquet. Dane wyjściowe można zobaczyć po uruchomieniu komórki w sekcji Pobierz ostatnie zapytanie wykonane na Amazon Redshift.

  1. Aby zweryfikować tabelę utworzoną przez zadanie z Amazon EMR na Amazon EC2, przejdź do konsoli Amazon Redshift i wybierz klaster redshift-spark-redshift-cluster na Pulpit nawigacyjny aprowizowanych klastrów strona.
  2. W szczegółach klastra na Zapytanie o dane menu, wybierz Zapytanie w edytorze zapytań v2.
  3. Wybierz klaster w okienku nawigacji i połącz się z klastrem Amazon Redshift, gdy poprosi o uwierzytelnienie.
  4. Wybierz Tymczasowe poświadczenia.
  5. W razie zamówieenia projektu Baza danych, wchodzić dev.
  6. W razie zamówieenia projektu nazwa użytkownika, wchodzić redshiftmasteruser.
  7. Dodaj Zapisz.
  8. W okienku nawigacji rozwiń klaster redshift-spark-redshift-cluster, rozwiń bazę danych dev, rozwiń tickiti rozwiń Stoły aby wyświetlić listę wszystkich tabel w schemacie tickit.

Powinieneś znaleźć stół test_emr.

  1. Wybierz (kliknij prawym przyciskiem myszy) tabelę test_emr, A następnie wybierz Wybierz tabelę wysłać zapytanie do tabeli.
  2. Dodaj run aby uruchomić instrukcję SQL.

Skorzystaj z integracji Amazon Redshift z Apache Spark na Amazon EMR Serverless

Wersja Amazon EMR 6.9.0 i nowsze zapewnia integrację Amazon Redshift dla Apache Spark JAR (zarządzanych przez Amazon Redshift) i Amazon Redshift JDBC JAR lokalnie na Amazon EMR Serverless. Pliki te znajdują się pod /usr/share/aws/redshift/ informator. W poniższym przykładzie używamy skryptu Pythona udostępnionego w zasobniku S3 przez utworzony wcześniej stos CloudFormation.

  1. W danych wyjściowych stosu CloudFormation zanotuj wartość for EMRServerlessExecutionScript, czyli lokalizację skryptu Pythona w zasobniku S3.
  2. Zwróć również uwagę na wartość dla EMRServerlessJobExecutionRole, która jest rolą IAM używaną podczas uruchamiania zadania Amazon EMR Serverless.
  3. Uzyskaj dostęp do Amazon EMR Studio, wybierając lub kopiując łącze podane w danych wyjściowych stosu CloudFormation dla klucza EMRStudioURL.
  4. Dodaj Konsultacje dla Bezserwerowe w okienku nawigacji.

Znajdziesz aplikację EMR stworzoną przez stos CloudFormation o nazwie emr-spark-redshift.

  1. Wybierz nazwę aplikacji, aby przesłać ofertę pracy.
  2. Dodaj Prześlij ofertę pracy.
  3. Pod Szczegóły pracy, Dla Imię, wprowadź identyfikującą nazwę zadania.
  4. W razie zamówieenia projektu Rola środowiska wykonawczego, wybierz rolę IAM, którą zanotowałeś wcześniej w danych wyjściowych stosu CloudFormation.
  5. W razie zamówieenia projektu Lokalizacja skryptu, podaj ścieżkę do skryptu Pythona, który zanotowałeś wcześniej w danych wyjściowych stosu CloudFormation.
  6. Rozwiń sekcję Właściwości iskry i wybierz Edytuj w tekście
  7. Wprowadź następującą wartość w polu tekstowym, która zawiera ścieżkę do pliku redshift-connector, sterownik Amazon Redshift JDBC, spark-avro JAR i minimal-json Pliki JAR:
    --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-redshift.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-avro.jar,/usr/share/aws/redshift/spark-redshift/lib/minimal-json.jar

  8. Dodaj Prześlij ofertę pracy.
  9. Poczekaj, aż zadanie zostanie ukończone, a status uruchomienia zostanie wyświetlony jako sukces.
  10. Przejdź do edytora zapytań Amazon Redshift, aby sprawdzić, czy tabela została pomyślnie utworzona.
  11. Sprawdź zapytania push-down uruchomione dla grupy zapytań Amazon Redshift emr-serverless-redshift. W bazie danych można uruchomić następującą instrukcję SQL dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'emr-serverless-redshift' ORDER BY start_time DESC LIMIT 1

Możesz zobaczyć, że zapytanie pushdown i wyniki zwracane są przechowywane w formacie pliku Parquet na Amazon S3.

Użyj integracji Amazon Redshift z Apache Spark na AWS Glue

Począwszy od wersji AWS Glue 4.0 i nowszych, zadania Apache Spark łączące się z Amazon Redshift mogą korzystać z integracji Amazon Redshift dla Apache Spark i sterownika Amazon Redshift JDBC. Istniejące zadania AWS Glue, które już wykorzystują Amazon Redshift jako źródło lub cel, można zaktualizować do AWS Glue 4.0, aby skorzystać z tego nowego złącza. Szablon CloudFormation dostarczony z tym postem tworzy następujące zasoby kleju AWS:

  • Połączenie AWS Glue dla Amazon Redshift – Połączenie do ustanowienia połączenia z AWS Glue do Amazon Redshift przy użyciu integracji Amazon Redshift dla Apache Spark
  • Rola IAM dołączona do zadania AWS Glue – Rola IAM do zarządzania uprawnieniami do uruchamiania zadania AWS Glue
  • AWS Klej zadanie – Skrypt dla zadania AWS Glue wykonującego transformacje i agregacje z wykorzystaniem integracji Amazon Redshift dla Apache Spark

Poniższy przykład wykorzystuje połączenie AWS Glue dołączone do zadania AWS Glue z PySpark i obejmuje następujące kroki:

  1. Na konsoli AWS Glue wybierz połączenia w okienku nawigacji.
  2. Pod połączenia, wybierz połączenie AWS Glue dla Amazon Redshift utworzone przez szablon CloudFormation.
  3. Sprawdź szczegóły połączenia.

Możesz teraz ponownie użyć tego połączenia w ramach zadania lub w wielu zadaniach.

  1. Na Złącza wybierz zadanie AWS Glue utworzone przez stos CloudFormation pod Twoje pracelub uzyskaj dostęp do zadania AWS Glue, korzystając z adresu URL podanego dla klucza GlueJob w danych wyjściowych stosu CloudFormation.
  2. Uzyskaj dostęp i zweryfikuj skrypt zadania AWS Glue.
  3. Na Szczegóły pracy karta, upewnij się, że Wersja kleju jest ustawione na Klej 4.0.

Dzięki temu zadanie korzysta z najnowszych redshift-spark złącze.

  1. Rozszerzać Zaawansowane właściwości oraz połączenia sprawdź, czy połączenie utworzone przez stos CloudFormation jest dołączone.
  2. Sprawdź parametry zadania dodane do zadania AWS Glue. Te wartości są również dostępne w danych wyjściowych dla stosu CloudFormation.
  3. Dodaj Zapisz , a następnie run.

Stan uruchomionego zadania można wyświetlić na stronie run patka.

  1. Po pomyślnym zakończeniu zadania możesz zweryfikować dane wyjściowe tabeli test-glue utworzonej przez zadanie AWS Glue.
  2. Sprawdzamy zapytania pushdown uruchamiane dla grupy zapytań Amazon Redshift glue-redshift. W bazie danych można uruchomić następującą instrukcję SQL dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'glue-redshift' ORDER BY start_time DESC LIMIT 1

Najlepsze praktyki

Pamiętaj o następujących najlepszych praktykach:

  • Rozważ użycie integracji Amazon Redshift dla Apache Spark z Amazon EMR zamiast korzystania z redshift-spark Connector (wersja społecznościowa) dla nowych zadań Apache Spark.
  • Jeśli masz istniejące zadania Apache Spark korzystające z redshift-spark (wersja społecznościowa), rozważ ich aktualizację, aby korzystały z integracji Amazon Redshift dla Apache Spark
  • Integracja Amazon Redshift dla Apache Spark automatycznie stosuje przesuwanie predykatów i zapytań w celu optymalizacji pod kątem wydajności. Zalecamy korzystanie z obsługiwanych funkcji (autopushdown) w zapytaniu. Integracja Amazon Redshift dla Apache Spark zamieni tę funkcję w zapytanie SQL i uruchomi zapytanie w Amazon Redshift. Ta optymalizacja powoduje pobranie wymaganych danych, dzięki czemu Apache Spark może przetwarzać mniej danych i mieć lepszą wydajność.
    • Rozważ użycie agregujących funkcji przesuwania w dół, takich jak avg, count, max, min, sum do pobierania przefiltrowanych danych do przetwarzania danych.
    • Rozważ użycie boolowskich operatorów przesuwania w dół, takich jak in, isnull, isnotnull, contains, endswith, startswith do pobierania przefiltrowanych danych do przetwarzania danych.
    • Rozważ użycie logicznych operatorów przesuwania w dół, takich jak and, or, not (lub !), aby pobrać przefiltrowane dane do przetwarzania danych.
  • Zaleca się przekazanie roli IAM za pomocą parametru aws_iam_role do uwierzytelniania Amazon Redshift z aplikacji Apache Spark na Amazon EMR lub AWS Glue. Rola IAM powinna mieć niezbędne uprawnienia do pobierania tymczasowych poświadczeń IAM w celu uwierzytelnienia w Amazon Redshift, jak pokazano w sekcji „Przykłady integracji Amazon Redshift dla Apache Spark w aplikacji Apache Spark” na tym blogu.
  • Dzięki tej funkcji nie musisz przechowywać swojej nazwy użytkownika i hasła Amazon Redshift w menedżerze tajemnic i bazie danych Amazon Redshift.
  • Amazon Redshift używa instrukcji UNLOAD SQL do przechowywania tych tymczasowych danych w Amazon S3. Aplikacja Apache Spark pobiera wyniki z katalogu tymczasowego (przechowywanego w formacie pliku Parquet). Ten katalog tymczasowy w usłudze Amazon S3 nie jest czyszczony automatycznie, dlatego może generować dodatkowe koszty. Zalecamy korzystanie Zasady cyklu życia Amazon S3 aby zdefiniować reguły przechowywania dla zasobnika S3.
  • Zaleca się włączenie Rejestrowanie audytu Amazon Redshift logowanie informacji o połączeniach i aktywnościach użytkowników w Twojej bazie danych.
  • Zaleca się włączenie Szyfrowanie spoczynkowe Amazon Redshift do szyfrowania Twoich danych, gdy Amazon Redshift zapisuje je w swoich centrach danych i odszyfrowywania ich dla Ciebie, gdy uzyskujesz do nich dostęp.
  • Zaleca się aktualizację do AWS Glue v4.0 i nowszych, aby korzystać z integracji Amazon Redshift dla Apache Spark, która jest dostępna od razu. Aktualizacja do tej wersji AWS Glue automatycznie skorzysta z tej funkcji.
  • Zaleca się uaktualnienie do wersji Amazon EMR 6.9.0 lub nowszej, aby korzystać z integracji Amazon Redshift dla Apache Spark. Nie musisz jawnie zarządzać żadnymi sterownikami ani plikami JAR.
  • Rozważ użycie notebooków Amazon EMR Studio do interakcji z danymi Amazon Redshift w aplikacji Apache Spark.
  • Rozważ użycie AWS Glue Studio do tworzenia zadań Apache Spark przy użyciu interfejsu wizualnego. Możesz także przełączyć się na pisanie kodu Apache Spark w Scali lub PySpark w AWS Glue Studio.

Sprzątać

Wykonaj następujące kroki, aby wyczyścić zasoby, które są tworzone jako część szablonu CloudFormation, aby upewnić się, że nie zostaniesz obciążony opłatami za zasoby, jeśli nie będziesz ich już używać:

  1. Zatrzymaj aplikację Amazon EMR Serverless:
    • Uzyskaj dostęp do Amazon EMR Studio, wybierając lub kopiując łącze podane w danych wyjściowych stosu CloudFormation dla klucza EMRStudioURL.
    • Dodaj Konsultacje dla Bezserwerowe w okienku nawigacji.

Znajdziesz aplikację EMR stworzoną przez stos CloudFormation o nazwie emr-spark-redshift.

    • Jeśli stan aplikacji to Zatrzymana, możesz przejść do kolejnych kroków. Jeśli jednak status aplikacji to Uruchomiona, wybierz nazwę aplikacji, a następnie wybierz Zatrzymaj aplikację i Zatrzymaj aplikację ponownie, aby potwierdzić.
  1. Usuń obszar roboczy Amazon EMR Studio:
    • Uzyskaj dostęp do Amazon EMR Studio, wybierając lub kopiując łącze podane w danych wyjściowych stosu CloudFormation dla klucza EMRStudioURL.
    • Dodaj Przestrzenie robocze w okienku nawigacji.
    • Wybierz utworzony obszar roboczy i wybierz Usuń, A następnie wybierz Usuń ponownie, aby potwierdzić.
  2. Usuń stos CloudFormation:
    • W konsoli AWS CloudFormation przejdź do utworzonego wcześniej stosu.
    • Wybierz nazwę stosu, a następnie wybierz Usuń aby usunąć stos i usunąć zasoby utworzone w ramach tego postu.
    • Na ekranie potwierdzenia wybierz Usuń stos.

Wnioski

W tym poście wyjaśniliśmy, w jaki sposób można wykorzystać integrację Amazon Redshift dla Apache Spark do tworzenia i wdrażania aplikacji z Amazon EMR na Amazon EC2, Amazon EMR Serverless i AWS Glue, aby automatycznie stosować predykat i przesyłanie zapytań w celu optymalizacji wydajności zapytań dla danych w Amazon Redshift. Zdecydowanie zaleca się korzystanie z integracji Amazon Redshift dla Apache Spark w celu bezproblemowego i bezpiecznego połączenia z Amazon Redshift z Amazon EMR lub AWS Glue.

Oto, co niektórzy z naszych klientów mają do powiedzenia na temat integracji Amazon Redshift dla Apache Spark:

„Umożliwiamy naszym inżynierom budowanie potoków danych i aplikacji za pomocą Apache Spark przy użyciu Pythona i Scali. Chcieliśmy dostosować rozwiązanie, które uprościłoby operacje i dostarczało naszym klientom szybsze i wydajniejsze rozwiązania, i właśnie to otrzymaliśmy dzięki nowej integracji Amazon Redshift dla Apache Spark”.

—Huron Consulting

„GE Aerospace korzysta z narzędzi analitycznych AWS i Amazon Redshift, aby zapewnić krytyczne informacje biznesowe, które wpływają na ważne decyzje biznesowe. Dzięki obsłudze automatycznego kopiowania z Amazon S3 możemy tworzyć prostsze potoki danych w celu przenoszenia danych z Amazon S3 do Amazon Redshift. Przyspiesza to dostęp naszych zespołów ds. danych do uzyskiwania dostępu do danych i dostarczania spostrzeżeń użytkownikom końcowym. Spędzamy więcej czasu na dodawaniu wartości poprzez dane, a mniej na integracjach”.

— GE Aerospace

„Koncentrujemy się na zapewnieniu samoobsługowego dostępu do danych wszystkim naszym użytkownikom w Goldman Sachs. Dzięki Legend, naszej platformie open source do zarządzania i zarządzania danymi, umożliwiamy użytkownikom opracowywanie aplikacji zorientowanych na dane i uzyskiwanie spostrzeżeń opartych na danych podczas współpracy w całej branży usług finansowych. Dzięki integracji Amazon Redshift dla Apache Spark, nasz zespół ds. platformy danych będzie mógł uzyskać dostęp do danych Amazon Redshift przy minimalnej liczbie ręcznych czynności, co pozwoli na ETL bez kodu, co zwiększy nasze możliwości, aby ułatwić inżynierom skupienie się na doskonaleniu przepływu pracy, ponieważ gromadzą pełne i aktualne informacje. Spodziewamy się poprawy wydajności aplikacji i poprawy bezpieczeństwa, ponieważ nasi użytkownicy mogą teraz łatwo uzyskać dostęp do najnowszych danych w Amazon Redshift”.

-Goldman Sachs


O autorach

Gagana Brahmiego jest starszym architektem rozwiązań specjalistycznych zajmującym się analizą dużych zbiorów danych i platformą AI/ML w Amazon Web Services. Gagan ma ponad 18 lat doświadczenia w technologiach informatycznych. Pomaga klientom w projektowaniu i budowaniu wysoce skalowalnych, wydajnych i bezpiecznych rozwiązań opartych na chmurze w AWS. W wolnym czasie spędza czas z rodziną i odkrywa nowe miejsca.

Vivek Gautam jest Data Architectem ze specjalizacją w data lake w AWS Professional Services. Współpracuje z klientami korporacyjnymi budującymi produkty danych, platformy analityczne i rozwiązania na AWS. Kiedy nie buduje i nie projektuje jezior danych, Vivek jest entuzjastą jedzenia, który lubi odkrywać nowe miejsca podróży i chodzić na wycieczki.

Naresz Gautam jest liderem Data Analytics i AI/ML w AWS z 20-letnim doświadczeniem, który lubi pomagać klientom w projektowaniu wysoce dostępnych, wydajnych i opłacalnych rozwiązań do analizy danych i AI/ML, aby umożliwić klientom podejmowanie decyzji w oparciu o dane . W wolnym czasie lubi medytować i gotować.

Piękne Sharifi jest inżynierem ds. rozwoju oprogramowania w zespole sterowników Amazon Redshift, gdzie kieruje rozwojem integracji Amazon Redshift ze złączem Apache Spark. Ma ponad 20-letnie doświadczenie w budowaniu platform opartych na danych w wielu branżach. W wolnym czasie lubi spędzać czas z rodziną i surfować.

Znak czasu:

Więcej z Duże zbiory danych AWS!