Migration de tâches AWS Glue pour Spark vers AWS Glue version 3.0 - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migration de tâches AWS Glue pour Spark vers AWS Glue version 3.0

Cette rubrique décrit les modifications entre AWS Glue versions 0.9, 1.0, 2.0 et 3.0 pour vous permettre de migrer vos applications Spark et vos tâches ETL vers AWS Glue 3.0.

Pour utiliser cette fonction avec vos tâches ETL AWS Glue, choisissez 3.0 pour la Glue version lors de la création de vos tâches.

Nouvelles fonctionnalités prises en charge

Cette section décrit les nouvelles fonctions et les avantages de AWS Glue version 3.0.

  • Il est basé sur Apache Spark 3.1.1, qui propose des optimisations à partir de Spark open-source et est développé par les services AWS Glue et EMR, tels que l'exécution adaptative de requêtes, les lecteurs vectorisés, les remaniements optimisées et la fusion de partitions.

  • Pilotes JDBC mis à niveau pour toutes les sources natives de Glue, y compris MySQL, Microsoft SQL Server, Oracle, PostgreSQL, MongoDB, ainsi que les dépendances et les bibliothèques Spark mises à niveau introduites par Spark 3.1.1.

  • Accès optimisé à Amazon S3 avec EMRFS mis à niveau et validateurs de sortie optimisés Amazon S3 activés par défaut.

  • Accès optimisé au catalogue de données avec des index de partition, le déploiement des prédicats, une liste de partitions et un client de métastore Hive mis à niveau.

  • Intégration à Lake Formation pour les tables de catalogue régies avec filtrage au niveau des cellules et transactions de lac de données.

  • Amélioration de l'expérience de l'interface utilisateur Spark avec Spark 3.1.1 avec les nouvelles mesures de mémoire de l'exécuteur Spark et les métriques de streaming structuré Spark.

  • Réduction de la latence au démarrage, ce qui améliore les temps globaux de réalisation de tâche et l'interactivité, similaire à AWS Glue 2.0.

  • Les tâches Spark sont facturées par incréments d'une seconde avec une durée de facturation minimale 10 fois inférieure, allant d'un minimum de 10 minutes à un minimum de 1 minute, semblable à AWS Glue 2.0.

Actions à migrer vers AWS Glue 3.0

Pour les tâches existantes, modifiez la Glue version depuis la version précédente vers Glue 3.0 dans la configuration de la tâche.

  • Dans la console, choisissez Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0) dans Glue version.

  • Dans AWS Glue Studio, choisissez Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 dans Glue version.

  • Dans l'API, choisissez 3.0 dans le paramètre GlueVersion de l'API UpdateJob.

Pour les nouvelles tâches, choisissez Glue 3.0 lorsque vous créez une tâche.

  • Dans la console, choisissez Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0) dans Glue version.

  • Dans AWS Glue Studio, choisissez Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 dans Glue version.

  • Dans l'API, choisissez 3.0 dans le paramètre GlueVersion de l'API CreateJob.

Pour afficher les journaux des événements Spark de AWS Glue 3.0, lancez un serveur d'historique Spark mis à niveau pour Glue 3.0 à l'aide de CloudFormation ou de Docker.

Liste de contrôle de la migration

Consultez cette liste de contrôle pour la migration.

  • Votre tâche dépend-elle de HDFS ? Si oui, essayez de remplacer HDFS par S3.

    • Recherchez le chemin d'accès du système de fichiers en commençant par hdfs:// ou / comme chemin d'accès DFS dans le code de script de la tâche.

    • Vérifiez si votre système de fichiers par défaut n'est pas configuré avec HDFS. S'il est configuré de manière explicite, vous devez supprimer la configuration fs.defaultFS.

    • Vérifiez si votre tâche contient des paramètres dfs.*. Si elle en contient, vous devez vérifier qu'il est correct de désactiver les paramètres.

  • Votre tâche dépend-elle de YARN ? Si oui, vérifiez les impacts en vérifiant que votre tâche contient les paramètres suivants. Si elle en contient, vous devez vérifier qu'il est correct de désactiver les paramètres.

    • spark.yarn.*

      Par exemple :

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

      Par exemple :

      yarn.scheduler.maximum-allocation-mb yarn.nodemanager.resource.memory-mb
  • Votre tâche dépend-elle de Spark 2.2.1 ou de Spark 2.4.3 ? Si oui, vérifiez les impacts en vérifiant si votre tâche utilise les fonctions modifiées dans Spark 3.1.1.

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

      Par exemple la fonction percentile_approx ou la SparkSession avec SparkSession.builder.getOrCreate() lorsqu'il existe un SparkContext.

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

      Par exemple la fonction array_contains ou la fonction CURRENT_DATE, CURRENT_TIMESTAMP avec spark.sql.caseSensitive=true.

  • Est-ce que les fichiers .jar supplémentaires de votre tâche sont en conflit dans Glue 3.0 ?

    • Depuis AWS Glue 0.9/1.0 : les fichiers .jar supplémentaires fournis dans les tâches 0.9/1.0 AWS Glue existantes peuvent entraîner des conflits de chemin de classe en raison de nouvelles dépendances ou de leur mise à niveau disponibles dans Glue 3.0. Vous pouvez éviter les conflits de chemin de classe dans AWS Glue 3.0 avec le paramètre de tâche --user-jars-first AWS Glue ou en ombrant vos dépendances.

    • Depuis AWS Glue 2.0  : vous pouvez toujours éviter les conflits de chemin de classe dans AWS Glue 3.0 avec le paramètre de tâche --user-jars-first AWS Glue ou en ombrant vos dépendances.

  • Vos tâches dépendent-elles de Scala 2.11 ?

    • AWS Glue 3.0 utilise Scala 2.12 donc vous devez reconstruire vos bibliothèques avec Scala 2.12 si vos bibliothèques dépendent de Scala 2.11.

  • Les bibliothèques Python externes de votre tâche dépendent-elles de Python 2.7/3.6 ?

    • Utilisation des paramètres --additional-python-modules au lieu de définir le fichier egg/wheel/zip dans le chemin de la bibliothèque Python.

    • Mettez à jour les bibliothèques dépendantes de Python 2.7/3.6 vers Python 3.7, car Spark 3.1.1 a supprimé la prise en charge de Python 2.7.

Migration de AWS Glue 0.9 vers AWS Glue 3.0

Notez les modifications suivantes lors de la migration :

  • AWS Glue 0.9 utilise Spark 2.2.1 open source et AWS Glue 3.0 utilise Spark 3.1.1 optimisé pour EMR.

    • Plusieurs modifications Spark peuvent à elles seules nécessiter une révision de vos scripts pour s'assurer que les fonctions supprimées ne sont pas référencées.

    • Par exemple, Spark 3.1.1 n'active pas les UDF Scala non typés, mais Spark 2.2 les autorise.

  • Toutes les tâches dans AWS Glue 3.0 seront exécutées avec des temps de démarrage considérablement améliorés. Les tâches Spark seront facturées par incréments d'une seconde avec une durée de facturation minimale 10 fois plus faible, puisque la latence de démarrage passera de 10 minutes maximum à 1 minute maximum.

  • Le comportement de journalisation a changé depuis AWS Glue 2.0.

  • Plusieurs mises à jour de dépendance, mises en évidence dans Annexe A : Mises à niveau notables des dépendances.

  • Scala est également mis à jour depuis la version 2.11 vers la version 2.12, et Scala 2.12 n'est pas rétrocompatible avec Scala 2.11.

  • Python 3.7 est également la version utilisée par défaut pour les scripts Python, comme AWS Glue 0.9 utilisait uniquement Python 2.

    • Python 2.7 n'est pas pris en charge avec Spark 3.1.1.

    • Un nouveau mécanisme d'installation de modules Python supplémentaires est disponible.

  • AWS Glue 3.0 ne fonctionne pas sur Apache YARN, donc les paramètres YARN ne s'appliquent pas.

  • AWS Glue 3.0 ne possède pas de système de fichiers distribué Hadoop (HDFS).

  • Tous les fichiers .jar supplémentaires fournis dans les tâches AWS Glue 0.9 existantes peuvent entraîner des dépendances conflictuelles, en raison des mises à niveau dans plusieurs dépendances dans 3.0 à partir de 0.9. Vous pouvez éviter les conflits de chemin de classe dans AWS Glue 3.0 avec le paramètre de tâche --user-jars-first AWS Glue .

  • AWS Glue 3.0 ne prend pas encore en charge l'allocation dynamique, donc les métriques ExecutorAllocationManager ne sont pas disponibles.

  • Dans les tâches AWS Glue version 3.0, vous spécifiez le nombre et le type d'employés, mais pas de maxCapacity.

  • AWS Glue 3.0 ne prend pas en charge les transformations Machine Learning.

  • AWS Glue 3.0 ne prend pas encore en charge les points de terminaison de développement.

Reportez-vous à la documentation sur la migration de Spark :

Migration de AWS Glue 1.0 vers AWS Glue 3.0

Notez les modifications suivantes lors de la migration :

  • AWS Glue 1.0 utilise Spark 2.4 open source et AWS Glue 3.0 utilise Spark 3.1.1 optimisé pour EMR.

    • Plusieurs modifications Spark peuvent à elles seules nécessiter une révision de vos scripts pour s'assurer que les fonctions supprimées ne sont pas référencées.

    • Par exemple, Spark 3.1.1 n'active pas les UDF Scala non typés, mais Spark 2.4 les autorise.

  • Toutes les tâches dans AWS Glue 3.0 seront exécutées avec des temps de démarrage considérablement améliorés. Les tâches Spark seront facturées par incréments d'une seconde avec une durée de facturation minimale 10 fois plus faible, puisque la latence de démarrage passera de 10 minutes maximum à 1 minute maximum.

  • Le comportement de journalisation a changé depuis AWS Glue 2.0.

  • Plusieurs mises à jour de dépendance, mises en évidence dans

  • Scala est également mis à jour depuis la version 2.11 vers la version 2.12, et Scala 2.12 n'est pas rétrocompatible avec Scala 2.11.

  • Python 3.7 est également la version utilisée par défaut pour les scripts Python, comme AWS Glue 0.9 utilisait uniquement Python 2.

    • Python 2.7 n'est pas pris en charge avec Spark 3.1.1.

    • Un nouveau mécanisme d'installation de modules Python supplémentaires est disponible.

  • AWS Glue 3.0 ne fonctionne pas sur Apache YARN, donc les paramètres YARN ne s'appliquent pas.

  • AWS Glue 3.0 ne possède pas de système de fichiers distribué Hadoop (HDFS).

  • Tous les fichiers .jar supplémentaires fournis dans les tâches AWS Glue 1.0 existantes peuvent entraîner des dépendances conflictuelles, en raison des mises à niveau dans plusieurs dépendances dans 3.0 à partir de 1.0. Vous pouvez éviter les conflits de chemin de classe dans AWS Glue 3.0 avec le paramètre de tâche --user-jars-first AWS Glue .

  • AWS Glue 3.0 ne prend pas encore en charge l'allocation dynamique, donc les métriques ExecutorAllocationManager ne sont pas disponibles.

  • Dans les tâches AWS Glue version 3.0, vous spécifiez le nombre et le type d'employés, mais pas de maxCapacity.

  • AWS Glue 3.0 ne prend pas en charge les transformations Machine Learning.

  • AWS Glue 3.0 ne prend pas encore en charge les points de terminaison de développement.

Reportez-vous à la documentation sur la migration de Spark :

Migration de AWS Glue 2.0 vers AWS Glue 3.0

Notez les modifications suivantes lors de la migration :

  • Tous les paramètres de tâche existants et les principales fonctions qui existent dans AWS Glue 2.0 existeront dans AWS Glue 3.0.

    • Le validateur EMRFS optimisé pour S3 pour l'écriture de données Parquet dans Amazon S3 est activé par défaut dans la version 3.0 de AWS Glue. Cependant, vous pouvez toujours le désactiver en définissant --enable-s3-parquet-optimized-committer sur false.

  • AWS Glue 2.0 utilise Spark 2.4 open source et AWS Glue 3.0 utilise Spark 3.1.1 optimisé pour EMR.

    • Plusieurs modifications Spark peuvent à elles seules nécessiter une révision de vos scripts pour s'assurer que les fonctions supprimées ne sont pas référencées.

    • Par exemple, Spark 3.1.1 n'active pas les UDF Scala non typés, mais Spark 2.4 les autorise.

  • AWS Glue 3.0 propose également une mise à jour vers EMRFS, des pilotes JDBC mis à jour et des inclusions d'optimisations supplémentaires sur Spark lui-même fournies par AWS Glue.

  • Toutes les tâches dans AWS Glue 3.0 seront exécutées avec des temps de démarrage considérablement améliorés. Les tâches Spark seront facturées par incréments d'une seconde avec une durée de facturation minimale 10 fois plus faible, puisque la latence de démarrage passera de 10 minutes maximum à 1 minute maximum.

  • Python 2.7 n'est pas pris en charge avec Spark 3.1.1.

  • Plusieurs mises à jour de dépendance, mises en évidence dans Annexe A : Mises à niveau notables des dépendances.

  • Scala est également mis à jour depuis la version 2.11 vers la version 2.12, et Scala 2.12 n'est pas rétrocompatible avec Scala 2.11.

  • Tous les fichiers .jar supplémentaires fournis dans les tâches AWS Glue 2.0 existantes peuvent entraîner des dépendances conflictuelles, en raison des mises à niveau dans plusieurs dépendances dans 3.0 à partir de 2.0. Vous pouvez éviter les conflits de chemin de classe dans AWS Glue 3.0 avec le paramètre de tâche --user-jars-first AWS Glue .

  • La version 3.0 de AWS Glue a un parallélisme des tâches Spark différent pour la configuration pilote/exécuteur par rapport à la version 2.0 de AWS Glue, améliore les performances et utilise mieux les ressources disponibles. Les deux éléments spark.driver.cores et spark.executor.cores sont configurés selon le nombre de cœurs sur la version 3.0 de AWS Glue (4 sur l'employé standard G.1X et 8 sur l'employé G.2X). Ces configurations ne modifient pas le type d'employé ou le matériel de la tâche AWS Glue. Vous pouvez utiliser ces configurations pour calculer le nombre de partitions ou de fractionnements correspondant au parallélisme des tâches Spark dans votre application Spark.

    En général, les tâches bénéficieront de performances similaires ou améliorées par rapport à AWS Glue 2.0. Si les tâches s'exécutent plus lentement, vous pouvez augmenter le parallélisme des tâches en transmettant l'argument de tâche suivant :

    • clé : --executor-cores valeur : <nombre souhaité de tâches pouvant être exécutées en parallèle>

    • La valeur ne doit pas dépasser le double du nombre de vCPU sur le type de travailleur, soit 8 sur G.1X, 16 sur G.2X, 32 sur G.4X et 64 sur. G.8X Vous devez faire preuve de prudence lors de la mise à jour de cette configuration, car elle pourrait avoir un impact sur les performances du travail. En effet, l'augmentation du parallélisme entraîne une surcharge de la mémoire et des disques, et peut également ralentir les systèmes source et cible.

  • La version 3.0 de AWS Glue utilise Spark 3.1, qui modifie le comportement du chargement/de l'enregistrement des horodatages depuis/vers des fichiers Parquet. Pour plus de détails, veuillez consulter Mise à niveau de Spark SQL 3.0 vers 3.1.

    Nous vous recommandons de définir les paramètres suivants lors de la lecture/écriture de données Parquet contenant des colonnes d'horodatage. La configuration de ces paramètres peut résoudre le problème d'incompatibilité du calendrier qui se produit pendant la mise à niveau de Spark 2 vers Spark 3, à la fois pour AWS Glue Dynamic Frame et Spark Data Frame. Utilisez l'option CORRECTED pour lire la valeur datetime telle quelle, et l'option LEGACY pour rebaser les valeurs datetime par rapport à la différence de calendrier pendant la lecture.

    - 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]

Reportez-vous à la documentation sur la migration de Spark :

Annexe A : Mises à niveau notables des dépendances

Voici les mises à niveau des dépendances :

Dépendance Version dans AWS Glue 0.9 Version dans AWS Glue 1.0 Version dans AWS Glue 2.0 Version dans 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
Flèche N/A 0.10.0 0.10.0 2.0.0
Client de catalogue AWS Glue N/A N/A 1.10.0 3.0.0

Annexe B : Mises à niveau du pilote JDBC

Voici les mises à niveau du pilote JDBC :

Pilote Version du pilote JDBC dans les versions AWS Glue antérieures Version du pilote JDBC dans AWS Glue 3.0
MySQL 5.1 8.0.23
Microsoft SQL Server 6.1.0 7.0.0
Oracle Databases 11.2 21.1
PostgreSQL 42.1.0 42.2.18
MongoDB 2.0.0 4.0.0