Je souhaite utiliser Spark avec Amazon EMR ou AWS Glue pour interagir avec Apache Iceberg à partir d'un catalogue de données AWS Glue multicomptes.
Résolution
Définissez les paramètres suivants pour utiliser Spark afin d'interagir avec les tables Apache Iceberg du catalogue de données AWS Glue :
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.dev.glue.id=<CROSS_ACCOUNT_ID> \
--conf spark.sql.catalog.glue_catalog.warehouse=s3://<your-warehouse-dir>/ \
--conf spark.sql.catalog.glue_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \
--conf spark.sql.catalog.glue_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO
Vous pouvez définir ces paramètres de différentes manières, selon que vous utilisez une tâche AWS Glue ou un cluster Amazon EMR.
Pour les tâches AWS Glue, utilisez les paramètres des tâches. Par exemple :
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://<WAREHOUSE_DIR>/ --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
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.
**Remarque :**Pour les scénarios multicomptes, vous devez toujours utiliser la propriété glue.id pour spécifier l'identifiant du catalogue de données AWS Glue correspondant (identifiant de compte AWS).
Si vous utilisez Amazon EMR version 6.5 ou ultérieure, 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://<WAREHOUSE_DIR>/",
"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 : La tâche Amazon EMR ou AWS Glue doit disposer d'autorisations AWS Identity and Access Management (IAM) suffisantes pour accéder au catalogue de données multicomptes AWS Glue. Pour plus d'informations, consultez la section Effectuer un appel d'API entre comptes.
Informations connexes
Lire un tableau Iceberg depuis Amazon S3 à l'aide de Spark