Migration von Aufträgen von AWS Glue für Spark zur AWS Glue-Version 3.0 - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Migration von Aufträgen von AWS Glue für Spark zur AWS Glue-Version 3.0

In diesem Thema werden die Änderungen zwischen AWS Glue Versionen 0.9, 1.0, 2.0 und 3.0 beschrieben, damit Sie Ihre Spark-Anwendungen und ETL-Aufträge auf AWS Glue 3.0 migrieren können.

Um dieses Feature mit Ihren AWS Glue-ETL-Aufträgen zu verwenden, wählen Sie bei der Auftragserstellung 3.0 für Glue version aus.

Neue unterstützte Funktionen

In diesem Abschnitt werden die neuen Funktionen und Vorteile von AWS Glue Version 3.0 beschrieben.

  • Sie basiert auf Apache Spark 3.1.1, der Optimierungen von Open-Source-Spark. Die Entwicklung erfolgte durch AWS Glue und EMR-Services wie die adaptive Abfrageausführung, Vektor-Reader und optimierte Shuffles und Partitionszusammenführung.

  • Aktualisierte JDBC-Treiber für alle nativen Glue-Quellen einschließlich MySQL, Microsoft SQL Server, Oracle, PostgreSQL, MongoDB und aktualisierte Spark-Bibliotheken und Abhängigkeiten, die von Spark 3.1.1 bereitgestellt wurden.

  • Optimierter Amazon-S3-Zugriff mit aktualisierten EMRFS und standardmäßig aktivierten optimierten Amazon-S3-Ausgabe-Committern.

  • Optimierter Data-Catalog-Zugriff mit Partitionsindizes, Push-Down-Prädikaten, Partitionsauflistung und aktualisiertem Hive-Metastore-Client.

  • Integration mit Lake Formation für kontrollierte Katalogtabellen mit Filterung auf Zellenebene und Data-Lake-Transaktionen.

  • Verbesserte Spark-UI-Erfahrung mit Spark 3.1.1 mit neuen Spark-Executor-Speichermetriken und Spark strukturierten Streaming-Metriken.

  • Reduzierte Startlatenz zur Verbesserung der gesamten Auftragsabschlusszeiten und der Interaktivität, ähnlich wie AWS Glue 2.0.

  • Spark-Aufträge werden in Schritten von 1 Sekunde mit einer zehnmal niedrigeren Mindestabrechnungsdauer abgerechnet – von mindestens 10 Minuten bis zu einer Minute, ähnlich wie AWS Glue 2.0.

Aktionen zur Migration zu AWS Glue 3.0

Ändern Sie bei vorhandenen Aufträgen die Glue version von der vorherigen Version auf Glue 3.0 in der Auftragskonfiguration.

  • Wählen Sie in der Konsole Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0) in der Glue version aus.

  • Wählen Sie in AWS Glue Studio Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 in Glue version aus.

  • Wählen Sie in der API 3.0 im GlueVersion-Parameter in der UpdateJob-API aus.

Wählen Sie für neue Aufträge Glue 3.0 aus, wenn Sie Aufträge erstellen.

  • Wählen Sie in der Konsole Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0) in der Glue version aus.

  • Wählen Sie in AWS Glue Studio Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 in Glue version aus.

  • Wählen Sie in der API 3.0 im GlueVersion-Parameter in der CreateJob-API aus.

Starten Sie einen aktualisierten Spark-Verlaufsserver, um Spark-Ereignisprotokolle von AWS Glue 3.0 für Glue 3.0 mit CloudFormation oder Docker anzuzeigen.

Migrationsprüfliste

Überprüfen Sie diese Checkliste für die Migration.

  • Hängt Ihr Auftrag von HDFS ab? Wenn ja, versuchen Sie, HDFS durch S3 zu ersetzen.

    • Suchen Sie den Dateisystempfad beginnend mit hdfs:// oder / als DFS-Pfad im Auftragsskriptcode.

    • Überprüfen Sie, ob Ihr Standard-Dateisystem nicht mit HDFS konfiguriert ist. Wenn es explizit konfiguriert ist, müssen Sie die fs.defaultFS-Konfiguration entfernen.

    • Überprüfen Sie, ob Ihr Auftrag dfs.*-Parameter enthält. Wenn der Auftrag Parameter enthält, müssen Sie überprüfen, ob es in Ordnung ist, die Parameter zu deaktivieren.

  • Hängt Ihr Auftrag von YARN ab? Wenn ja, überprüfen Sie die Auswirkungen, indem Sie prüfen, ob Ihr Auftrag die folgenden Parameter enthält. Wenn der Auftrag Parameter enthält, müssen Sie überprüfen, ob es in Ordnung ist, die Parameter zu deaktivieren.

    • spark.yarn.*

      Zum Beispiel:

      spark.yarn.executor.memoryOverhead spark.yarn.driver.memoryOverhead spark.yarn.scheduler.reporterThread.maxFailures
    • yarn.*

      Zum Beispiel:

      yarn.scheduler.maximum-allocation-mb yarn.nodemanager.resource.memory-mb
  • Hängt Ihr Auftrag von Spark 2.2.1 oder Spark 2.4.3 ab? Wenn ja, überprüfen Sie die Auswirkungen, indem Sie überprüfen, ob Ihr Auftrag Funktionen verwendet, die in Spark 3.1.1 geändert wurden.

    • https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-22-to-23

      Zum Beispiel die Funktion percentile_approx oder SparkSession mit SparkSession.builder.getOrCreate(), wenn es einen bestehenden SparkContext gibt.

    • https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-23-to-24

      Zum Beispiel die Funktion array_contains oder die Funktionen CURRENT_DATE, CURRENT_TIMESTAMP mit spark.sql.caseSensitive=true.

  • Gibt es einen Konflikt in Glue 3.0 mit den zusätzlichen Jars Ihres Auftrags?

    • AWS Glue 0.9/1.0: Zusätzliche Jars in vorhandenen Aufträgen in AWS Glue 0.9/1.0-können Klassenpfadkonflikte verursachen, da aktualisierte oder neue Abhängigkeiten in Glue 3.0 verfügbar sind. Sie können Klassenpfadkonflikte in AWS Glue 3.0 mit dem AWS Glue-Auftragsparameter --user-jars-first oder indem Sie Shading für Ihre Abhängigkeiten aktivieren.

    • AWS Glue 2.0: Sie können Klassenpfadkonflikte in AWS Glue 3.0 mit dem AWS Glue-Auftragsparameter --user-jars-first vermeiden oder indem Sie Shading für Ihre Abhängigkeiten aktivieren.

  • Sind Ihre Aufträge von Scala 2.11 abhängig?

    • AWS Glue 3.0 verwendet Scala 2.12, so dass Sie Ihre Bibliotheken mit Scala 2.12 neu erstellen müssen, wenn Ihre Bibliotheken von Scala 2.11 abhängen.

  • Sind die externen Python-Bibliotheken Ihres Auftrags von Python 2.7/3.6 abhängig?

    • Verwenden Sie die --additional-python-modules-Parameter, statt die Datei egg/wheel/zip im Python-Bibliothekspfad festzulegen.

    • Aktualisieren Sie die abhängigen Bibliotheken von Python 2.7/3.6 auf Python 3.7, da Spark 3.1.1 Python 2.7 nicht mehr unterstützt.

Migration von AWS Glue 0.9 auf AWS Glue 3.0

Beachten Sie die folgenden Änderungen bei der Migration:

  • AWS Glue 0.9 verwendet Open-Source-Spark 2.2.1 und AWS Glue 3.0 verwendet EMR-optimierte Spark 3.1.1.

    • Einige Spark-Änderungen allein erfordern möglicherweise eine Überarbeitung Ihrer Skripte, um sicherzustellen, dass entfernte Funktionen nicht referenziert werden.

    • Beispielsweise aktiviert Spark 3.1.1 nicht typisierte Scala-UDFs, aber Spark 2.2 erlaubt sie.

  • Alle Aufträge in AWS Glue 3.0 werden mit deutlich verbesserten Startzeiten ausgeführt. Spark-Aufträge werden in 1-Sekunden-Schritten mit einer 10-fach niedrigeren Mindestabrechnungsdauer in Rechnung gestellt, da die Startlatenz von maximal 10 Minuten zu maximal 1 Minute reicht.

  • Das Protokollierungsverhalten hat sich seit AWS Glue 2.0 geändert.

  • Mehrere Abhängigkeitsaktualisierungen, hervorgehoben in Anhang A: bemerkenswerte Abhängigkeits-Upgrades.

  • Scala wird auch von 2.12 auf 2.11 aktualisiert, und Scala 2.12 ist nicht abwärtskompatibel mit Scala 2.11.

  • Python 3.7 ist auch die Standardversion für Python-Skripte, da AWS Glue 0.9 nur Python 2 verwendet hat.

    • Python 2.7 wird mit Spark 3.1.1 nicht unterstützt.

    • Ein neuer Mechanismus zur Installation zusätzlicher Python-Module ist verfügbar.

  • AWS Glue 3.0 läuft nicht auf Apache YARN, daher gelten die YARN-Einstellungen nicht

  • AWS Glue 3.0 verfügt über kein Hadoop Distributed File System (HDFS).

  • Alle zusätzlichen Jars in vorhandenen Aufträgen in AWS Glue 0.9 können zu in Konflikt stehenden Abhängigkeiten führen, da es Aktualisierungen in verschiedenen Abhängigkeiten von 0.9 zu 3.0 gibt. Sie können Klassenpfadkonflikte in AWS Glue 3.0 mit dem AWS Glue-Auftragsparameter --user-jars-first vermeiden.

  • AWS Glue 3.0 unterstützt keine dynamische Zuweisung, daher sind die ExecutorAllocationManager-Metriken nicht verfügbar

  • Für Aufträge von AWS Glue Version 3.0 geben Sie die Anzahl der Worker und den Worker-Typ an. Sie geben jedoch keinen maxCapacity an.

  • AWS Glue 3.0 unterstützt die Transformationen des Machine Learning noch nicht.

  • AWS Glue 3.0 unterstützt noch keine Entwicklungsendpunkte.

Weitere Informationen finden Sie in der Dokumentation zur Spark-Migration:

Migration von AWS Glue 1.0 auf AWS Glue 3.0

Beachten Sie die folgenden Änderungen bei der Migration:

  • AWS Glue 1.0 verwendet Open-Source-Spark 2.4 und AWS Glue 3.0 verwendet EMR-optimiertes Spark 3.1.1.

    • Einige Spark-Änderungen allein erfordern möglicherweise eine Überarbeitung Ihrer Skripte, um sicherzustellen, dass entfernte Funktionen nicht referenziert werden.

    • Beispielsweise aktiviert Spark 3.1.1 nicht typisierte Scala-UDFs, aber Spark 2.4 erlaubt sie.

  • Alle Aufträge in AWS Glue 3.0 werden mit deutlich verbesserten Startzeiten ausgeführt. Spark-Aufträge werden in 1-Sekunden-Schritten mit einer 10-fach niedrigeren Mindestabrechnungsdauer in Rechnung gestellt, da die Startlatenz von maximal 10 Minuten zu maximal 1 Minute reicht.

  • Das Protokollierungsverhalten hat sich seit AWS Glue 2.0 geändert.

  • Mehrere Abhängigkeitsaktualisierungen, hervorgehoben in

  • Scala wird auch von 2.12 auf 2.11 aktualisiert, und Scala 2.12 ist nicht abwärtskompatibel mit Scala 2.11.

  • Python 3.7 ist auch die Standardversion für Python-Skripte, da AWS Glue 0.9 nur Python 2 verwendet hat.

    • Python 2.7 wird mit Spark 3.1.1 nicht unterstützt.

    • Ein neuer Mechanismus zur Installation zusätzlicher Python-Module ist verfügbar.

  • AWS Glue 3.0 läuft nicht auf Apache YARN, daher gelten die YARN-Einstellungen nicht

  • AWS Glue 3.0 verfügt über kein Hadoop Distributed File System (HDFS).

  • Alle zusätzlichen Jars in vorhandenen Aufträgen in AWS Glue 1.0 können zu in Konflikt stehenden Abhängigkeiten führen, da es Aktualisierungen in verschiedenen Abhängigkeiten von 1.0 zu 3.0 gibt. Sie können Klassenpfadkonflikte in AWS Glue 3.0 mit dem AWS Glue-Auftragsparameter --user-jars-first vermeiden.

  • AWS Glue 3.0 unterstützt keine dynamische Zuweisung, daher sind die ExecutorAllocationManager-Metriken nicht verfügbar

  • Für Aufträge von AWS Glue Version 3.0 geben Sie die Anzahl der Worker und den Worker-Typ an. Sie geben jedoch keinen maxCapacity an.

  • AWS Glue 3.0 unterstützt die Transformationen des Machine Learning noch nicht.

  • AWS Glue 3.0 unterstützt noch keine Entwicklungsendpunkte.

Weitere Informationen finden Sie in der Dokumentation zur Spark-Migration:

Migration von AWS Glue 2.0 zu AWS Glue 3.0

Beachten Sie die folgenden Änderungen bei der Migration:

  • Alle vorhandenen Auftragsparameter und Hauptfunktionen, die in AWS Glue 2.0 vorhanden sind, werden auch in AWS Glue 3.0 vorhanden sein.

    • Der S3-optimierte EMRFS-Committer zum Schreiben von Parquet-Daten in Amazon S3 ist in AWS Glue 3.0 standardmäßig aktiviert. Sie können ihn jedoch nach wie vor deaktivieren, indem Sie --enable-s3-parquet-optimized-committer auf false einstellen.

  • AWS Glue 2.0 verwendet Open-Source-Spark 2.4 und AWS Glue 3.0 verwendet EMR-optimiertes Spark 3.1.1.

    • Einige Spark-Änderungen allein erfordern möglicherweise eine Überarbeitung Ihrer Skripte, um sicherzustellen, dass entfernte Funktionen nicht referenziert werden.

    • Beispielsweise aktiviert Spark 3.1.1 nicht typisierte Scala-UDFs, aber Spark 2.4 erlaubt sie.

  • AWS Glue 3.0 bietet auch eine Aktualisierung für EMRFS, aktualisierte JDBC-Treiber und zusätzliche Optimierungen auf Spark selbst von AWS Glue.

  • Alle Aufträge in AWS Glue 3.0 werden mit deutlich verbesserten Startzeiten ausgeführt. Spark-Aufträge werden in 1-Sekunden-Schritten mit einer 10-fach niedrigeren Mindestabrechnungsdauer in Rechnung gestellt, da die Startlatenz von maximal 10 Minuten zu maximal 1 Minute reicht.

  • Python 2.7 wird mit Spark 3.1.1 nicht unterstützt.

  • Mehrere Abhängigkeitsaktualisierungen, hervorgehoben in Anhang A: bemerkenswerte Abhängigkeits-Upgrades.

  • Scala wird auch von 2.12 auf 2.11 aktualisiert, und Scala 2.12 ist nicht abwärtskompatibel mit Scala 2.11.

  • Alle zusätzlichen Jars in vorhandenen Aufträgen in AWS Glue 2.0 können zu in Konflikt stehenden Abhängigkeiten führen, da es Aktualisierungen in verschiedenen Abhängigkeiten von 2.0 zu 3.0 gibt. Sie können Klassenpfadkonflikte in AWS Glue 3.0 mit dem AWS Glue-Auftragsparameter --user-jars-first vermeiden.

  • AWS Glue 3.0 hat eine andere Parallelität von Spark-Aufgaben für die Treiber-/Executor-Konfiguration im Vergleich zu AWS Glue 2.0, verbessert die Leistung mehr und nutzt die verfügbaren Ressourcen besser. Sowohl spark.driver.cores als auch spark.executor.cores sind auf die Anzahl der Kerne in AWS Glue 3.0 konfiguriert (4 im Standard und G.1X Worker sowie 8 im G.2X Worker). Diese Konfigurationen ändern nicht den Workertyp oder die Hardware für den AWS Glue-Auftrag. Sie können diese Konfigurationen verwenden, um die Anzahl der Partitionen oder Splits zu berechnen, die der Parallelität der Spark-Aufgabe in Ihrer Spark-Anwendung entsprechen.

    Im Allgemeinen weisen Aufträge im Vergleich zu AWS Glue 2.0 entweder eine ähnliche oder eine bessere Leistung auf. Wenn Aufträge langsamer ausgeführt werden, können Sie die Parallelität der Aufgaben erhöhen, indem Sie das folgende Auftragsargument übergeben:

    • key: --executor-cores value: <gewünschte Anzahl von Aufgaben, die parallel ausgeführt werden können>

    • Der Wert sollte das Zweifache der Anzahl der vCPUs auf dem Worker-Typ nicht überschreiten, also 8 auf G.1X, 16 auf G.2X, 32 auf G.4X und 64 auf G.8X. Sie sollten bei der Aktualisierung dieser Konfiguration vorsichtig vorgehen, da sie sich auf die Auftragsleistung auswirken kann, da die erhöhte Parallelität Speicher- und Festplattenbelastungen verursacht und die Quell- und Zielsysteme drosseln könnte.

  • AWS Glue 3.0 verwendet Spark 3.1, das das Verhalten zum Laden/Speichern von Zeitstempeln von/in Parqet-Dateien ändert. Weitere Informationen finden Sie unter Upgrade von Spark SQL 3.0 auf 3.1.

    Wir empfehlen, beim Lesen/Schreiben von Parquet-Daten, die Zeitstempelspalten enthalten, die folgenden Parameter einzustellen. Das Festlegen dieser Parameter kann das Problem mit der Kalenderinkompatibilität, das während des Upgrades von Spark 2 auf Spark 3 auftritt, sowohl für den AWS Glue Dynamic Frame als auch den Spark Data Frame beheben. Verwenden Sie die Option CORRECTED, um den Datetime-Wert so zu lesen, wie er ist, und die LEGACY-Option, um die Datetime-Werte im Hinblick auf die Kalenderdifferenz während des Lesens neu zu basieren.

    - Key: --conf - Value: spark.sql.legacy.parquet.int96RebaseModeInRead=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=[CORRECTED|LEGACY]

Weitere Informationen finden Sie in der Dokumentation zur Spark-Migration:

Anhang A: bemerkenswerte Abhängigkeits-Upgrades

Im Folgenden sind Abhängigkeits-Upgrades aufgeführt:

-Abhängigkeit Version in AWS Glue 0.9 Version in AWS Glue 1.0 Version in AWS Glue 2.0 Version in AWS Glue 3.0
Spark 2.2.1 2.4.3 2.4.3 3.1.1-amzn-0
Hadoop 2.7.3-amzn-6 2.8.5-amzn-1 2.8.5-amzn-5 3.2.1-amzn-3
Scala 2.11 2.11 2.11 2.12
Jackson 2.7.x 2.7.x 2.7.x 2.10.x
Hive 1.2 1.2 1.2 2.3.7-amzn-4
EMRFS 2.20.0 2.30.0 2.38.0 2.46.0
JSON4s 3.2.x 3.5.x 3.5.x 3.6.6
Arrow 0.10.0 0.10.0 2.0.0
AWS Glue Catalog Client 1.10.0 3.0.0

Anhang B: Aktualisierungen von JDBC-Treibern

Die folgenden JDBC-Treiber-Upgrades sind:

Treiber JDBC-Treiberversion in älteren AWS Glue-Versionen JDBC-Treiberversion in AWS Glue 3.0
MySQL 5.1 8.0.23
Microsoft SQL Server 6.1.0 7.0.0
Oracle-Datenbanken 11.2 21.1
PostgreSQL 42.1.0 42.2.18
MongoDB 2.0.0 4.0.0