Je souhaite utiliser Apache Spark avec Amazon EMR ou AWS Glue pour interagir avec Apache Iceberg à partir d'un catalogue de données AWS Glue sur un autre compte AWS.
Résolution
Pour utiliser Spark avec les tables Apache Iceberg du catalogue de données AWS Glue, définissez les paramètres de votre tâche AWS Glue ou de votre cluster Amazon EMR.
La tâche Amazon EMR ou AWS Glue doit disposer d'autorisations Gestion des identités et des accès AWS (AWS IAM) suffisantes pour accéder au catalogue de données intercompte AWS Glue. Pour plus d'informations, consultez la section Méthodes d'octroi d'un accès intercompte dans AWS Glue.
Vous devez utiliser la propriété Catalog.Id pour spécifier l'ID du compte dans lequel se trouve le catalogue de données AWS Glue. Pour plus d'informations, consultez la section Effectuer un appel d'API intercompte.
Définir les paramètres dans AWS Glue
Pour les tâches AWS Glue, définissez les paramètres de tâche.
Exemples de paramètres de tâche :
Key: --conf Value: spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.dev=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.dev.glue.id=CROSS_ACCOUNT_ID --conf spark.sql.catalog.dev.warehouse=s3://amzn-s3-demo-bucket/ --conf spark.sql.catalog.dev.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.dev.io-impl=org.apache.iceberg.aws.s3.S3FileIO
Remarque : Remplacez CROSS_ACCOUNT_ID par votre ID intercompte, amzn-s3-demo-bucket par l'emplacement de votre compartiment S3.
Définir les paramètres dans Amazon EMR
Pour un cluster Amazon EMR qui exécute la version 6.5 ou ultérieure, définissez les paramètres lorsque vous soumettez la tâche. Vous pouvez également utiliser la configuration par défaut de Spark, /etc/spark/conf/spark-defaults.conf. Pour plus d'informations, consultez la section Utiliser un cluster Iceberg avec Spark.
Pour définir les paramètres, exécutez la commande spark-submit suivante :
spark-submit \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket/prefix \
--conf spark.sql.catalog.my_catalog.type=glue \
--conf spark.sql.catalog.my_catalog.glue.id=CROSS_ACCOUNT_ID \
--conf spark.sql.defaultCatalog=my_catalog \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
Remarque : Remplacez CROSS_ACCOUNT_ID par votre ID intercompte, le préfixe amzn-s3-demo-bucket/ par l'emplacement et le préfixe de votre compartiment S3, et my_catalog par votre catalogue.
-ou-
Utilisez la configuration spark-defaults suivante :
] } "configurations": []
},
"spark.sql.catalog.dev.io-impl": "org.apache.iceberg.aws.s3.S3FileIO"
"spark.sql.catalog.dev.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog",
"spark.sql.catalog.dev.warehouse": "s3://amzn-s3-demo-bucket/",
"spark.sql.catalog.dev.glue.id": "CROSS_ACCOUNT_ID",
"spark.sql.catalog.dev": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.jars": "/usr/share/aws/iceberg/lib/iceberg-spark3-runtime.jar",
"properties": {
"classification": "spark-defaults",
{
},
"configurations": []
},
"iceberg.enabled": "true"
"properties": {
"classification": "iceberg-defaults",
{
[
Remarque : Remplacez CROSS_ACCOUNT_ID par votre ID intercompte, amzn-s3-demo-bucket par l'emplacement de votre compartiment S3.
Informations connexes
Lire un tableau Iceberg depuis Amazon S3 à l'aide de Spark