Travailler avec Apache Iceberg dans AWS Glue - AWS Conseils prescriptifs

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.

Travailler avec Apache Iceberg dans AWS Glue

AWS Glueest un service d'intégration de données sans serveur qui facilite la découverte, la préparation, le déplacement et l'intégration de données provenant de sources multiples à des fins d'analyse, d'apprentissage automatique (ML) et de développement d'applications. L'une de ses principales fonctionnalités AWS Glue est sa capacité à effectuer des opérations d'extraction, de transformation et de chargement (ETL) de manière simple et rentable. Cela permet de classer vos données, de les nettoyer, de les enrichir et de les déplacer de manière fiable entre différents magasins de données et flux de données. 

AWS Glue les jobs encapsulent des scripts qui définissent la logique de transformation à l'aide d'un environnement d'exécution Apache Spark ou Python. AWS Glue les tâches peuvent être exécutées à la fois en mode batch et en mode streaming. 

Lorsque vous créez des tâches Iceberg dans AWS Glue, selon la version de AWS Glue, vous pouvez utiliser l'intégration native d'Iceberg ou une version personnalisée d'Iceberg pour associer des dépendances Iceberg à la tâche.

Utilisation de l'intégration native d'Iceberg

AWS Glue les versions 3.0, 4.0 et 5.0 prennent en charge nativement les formats de lacs de données transactionnels tels qu'Apache Iceberg, Apache Hudi et Linux Foundation Delta Lake in for Spark. AWS Glue Cette fonctionnalité d'intégration simplifie les étapes de configuration requises pour commencer à utiliser ces frameworks dans AWS Glue.

Pour activer le support d'Iceberg pour votre AWS Glue tâche, définissez la tâche : choisissez l'onglet Détails de la tâche correspondant à votre AWS Glue tâche, accédez à Paramètres de la tâche sous Propriétés avancées, puis définissez la clé --datalake-formats et sa valeur suriceberg.

Si vous créez une tâche à l'aide d'un bloc-notes, vous pouvez configurer le paramètre dans la première cellule du bloc-notes en utilisant la %%configure magie suivante :

%%configure { "--conf" : <job-specific Spark configuration discussed later>, "--datalake-formats" : "iceberg" }

La iceberg configuration de --datalake-formats in AWS Glue correspond à des versions spécifiques d'Iceberg en fonction de votre AWS Glue version :

AWS Glue version Version par défaut d'Iceberg

5.0

1.7.1

4.0

1.0.0

3.0

0.13.1

Utilisation d'une version personnalisée d'Iceberg

Dans certains cas, vous souhaiterez peut-être conserver le contrôle de la version d'Iceberg pour la tâche et la mettre à niveau à votre propre rythme. Par exemple, la mise à niveau vers une version ultérieure peut débloquer l'accès à de nouvelles fonctionnalités et à des améliorations de performances. Pour utiliser une version spécifique d'Iceberg AWS Glue, vous pouvez fournir vos propres fichiers JAR.

Avant d'implémenter une version personnalisée d'Iceberg, vérifiez la compatibilité avec votre AWS Glue environnement en consultant la section des AWS Glue versions de la AWS Glue documentation. Par exemple, la AWS Glue version 5.0 nécessite une compatibilité avec Spark 3.5.4.

Par exemple, pour exécuter des AWS Glue tâches utilisant la version 1.9.1 d'Iceberg, procédez comme suit :

  1. Procurez-vous et téléchargez les fichiers JAR requis sur Amazon S3 :

    1. Téléchargez iceberg-spark-runtime-3.5_2.12-1.9.1.jar et -1.9.1.jar depuis le dépôt Apache Maven. iceberg-aws-bundle

    2. Téléchargez ces fichiers dans l'emplacement de compartiment S3 que vous avez désigné (par exemple,s3://your-bucket-name/jars/).

  2. Configurez les paramètres de votre AWS Glue tâche comme suit :

    1. Spécifiez le chemin S3 complet vers les deux fichiers JAR dans le --extra-jars paramètre, en les séparant par une virgule (par exemple,s3://your-bucket-name/jars/iceberg-spark-runtime-3.5_2.12-1.9.1.jar,s3://your-bucket-name/jars/iceberg-aws-bundle-1.9.1.jar).

    2. N'incluez pas iceberg comme valeur du paramètre --datalake-formats.

    3. Si vous utilisez la AWS Glue version 5.0, vous devez définir le --user-jars-first paramètre surtrue.

Configurations Spark pour Iceberg dans AWS Glue

Cette section décrit les configurations Spark requises pour créer une tâche AWS Glue ETL pour un ensemble de données Iceberg. Vous pouvez définir ces configurations en utilisant la clé --conf Spark avec une liste séparée par des virgules de toutes les clés et valeurs de configuration Spark. Vous pouvez utiliser la %%configure magie d'un bloc-notes ou de la section Paramètres du Job de la AWS Glue Studio console.

%glue_version 5.0 %%configure { "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions...", "--datalake-formats" : "iceberg" }

Configurez la session Spark avec les propriétés suivantes :

  • <catalog_name>est le nom du catalogue de votre session Iceberg Spark. Remplacez-le par le nom de votre choix et n'oubliez pas de modifier les références dans toutes les configurations associées à ce catalogue. Dans votre code, vous pouvez faire référence à vos tables Iceberg en utilisant le nom complet de la table, y compris le nom du catalogue de sessions Spark, comme suit :

    <catalog_name>.<database_name>.<table_name>

    Vous pouvez également remplacer le catalogue par défaut par le catalogue Iceberg que vous avez défini en définissant le nom spark.sql.defaultCatalog de votre catalogue. Vous pouvez utiliser cette seconde approche pour faire référence à des tables sans le préfixe de catalogue, ce qui peut simplifier vos requêtes.

  • <catalog_name>.<warehouse>pointe vers le chemin Amazon S3 où vous souhaitez stocker vos données et métadonnées.

  • Pour que le catalogue soit un AWS Glue Data Catalog, définissez spark.sql.catalog.<catalog_name>.type surglue. Cette clé est requise pour pointer vers une classe d'implémentation pour toute implémentation de catalogue personnalisé. Pour les catalogues pris en charge par Iceberg, consultez la section Bonnes pratiques générales plus loin dans ce guide.

Par exemple, si un catalogue est appeléglue_iceberg, vous pouvez configurer votre tâche à l'aide de plusieurs --conf clés comme suit :

%%configure { "--datalake-formats" : "iceberg", "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.glue_iceberg=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.glue_iceberg.warehouse=s3://<your-warehouse-dir>/ --conf spark.sql.catalog.glue_iceberg.type=glue" }

Vous pouvez également utiliser du code pour ajouter les configurations ci-dessus à votre script Spark comme suit :

spark = SparkSession.builder\ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")\ .config("spark.sql.catalog.glue_iceberg", "org.apache.iceberg.spark.SparkCatalog")\ .config("spark.sql.catalog.glue_iceberg.warehouse","s3://<your-warehouse-dir>/")\ .config("spark.sql.catalog.glue_iceberg.type", "glue") \ .getOrCreate()

Bonnes pratiques en matière AWS Glue d'emploi

Cette section fournit des directives générales pour ajuster les tâches Spark AWS Glue afin d'optimiser la lecture et l'écriture de données dans les tables Iceberg. Pour connaître les meilleures pratiques spécifiques à Iceberg, consultez la section Meilleures pratiques plus loin dans ce guide.

  • Utilisez la dernière version de AWS Glue et mettez-la à niveau chaque fois que possible : les nouvelles versions de AWS Glue fournissent des améliorations de performances, des temps de démarrage réduits et de nouvelles fonctionnalités. Ils prennent également en charge les nouvelles versions de Spark qui peuvent être nécessaires pour les dernières versions d'Iceberg. Pour obtenir la liste des AWS Glue versions disponibles et des versions de Spark qu'elles prennent en charge, consultez la AWS Glue documentation.

  • Optimisez la mémoire des AWS Glue tâches : suivez les recommandations du billet de AWS blog Optimisez la gestion de la mémoire dans AWS Glue.

  • Utiliser AWS Glue Auto Scaling : lorsque vous activez Auto Scaling, il ajuste AWS Glue automatiquement le nombre de AWS Glue travailleurs de manière dynamique en fonction de votre charge de travail. Cela permet de réduire le coût de votre AWS Glue travail pendant les périodes de pointe, car AWS Glue le nombre de travailleurs est réduit lorsque la charge de travail est faible et que les travailleurs restent inactifs. Pour utiliser AWS Glue Auto Scaling, vous devez spécifier un nombre maximum de travailleurs auxquels votre AWS Glue travail peut être adapté. Pour plus d'informations, consultez la section Utilisation de la mise à l'échelle automatique pourAWS Glue dans la AWS Glue documentation.

  • Utilisez la version d'Iceberg souhaitée. L'intégration AWS Glue native pour Iceberg est la meilleure solution pour démarrer avec Iceberg. Toutefois, pour les charges de travail de production, nous vous recommandons d'ajouter des dépendances aux bibliothèques (comme indiqué précédemment dans ce guide) afin de contrôler totalement la version d'Iceberg. Cette approche vous permet de tirer parti des dernières fonctionnalités d'Iceberg et d'améliorer les performances dans le cadre de vos AWS Glue tâches.

  • Activez l'interface utilisateur Spark pour la surveillance et le débogage : vous pouvez également utiliser l'interface utilisateur Spark AWS Glue pour inspecter votre tâche Iceberg en visualisant les différentes étapes d'une tâche Spark dans un graphe acyclique dirigé (DAG) et en surveillant les tâches en détail. L'interface utilisateur Spark constitue un moyen efficace de résoudre les problèmes et d'optimiser les tâches d'Iceberg. Par exemple, vous pouvez identifier les phases d'étranglement associées à de nombreux remaniements ou à des pertes de disque afin d'identifier les opportunités de réglage. Pour plus d'informations, consultez la section Surveillance des tâches à l'aide de l'interface utilisateur Web d'Apache Spark dans la AWS Glue documentation.