Quiero usar Apache Spark con Amazon EMR o AWS Glue para interactuar con Apache Iceberg desde un catálogo de datos de AWS Glue en otra cuenta de AWS.
Resolución
Para usar las tablas de Spark con Apache Iceberg del catálogo de datos de AWS Glue, define los parámetros en tu trabajo de AWS Glue o en tu clúster de Amazon EMR.
El trabajo de Amazon EMR o AWS Glue tiene que tener permisos de AWS Identity y Access Management (IAM) para acceder al Catálogo de datos de AWS Glue entre cuentas. Para obtener más información, consulta Métodos para conceder acceso entre cuentas en AWS Glue.
Debes usar la propiedad Catalog.Id para especificar el ID de la cuenta en la que se encuentra el catálogo de datos de AWS Glue. Para obtener más información, consulta Realización de una llamada a la API entre cuentas.
Establecimiento de parámetros en AWS Glue
Para los trabajos de AWS Glue, define los parámetros del trabajo.
Parámetros de trabajo de ejemplo:
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
Nota: Sustituye CROSS_ACCOUNT_ID por tu ID entre cuentas y amzn-s3-demo-bucket por la ubicación de tu bucket de S3.
Establecimiento de parámetros en Amazon EMR
En un clúster de Amazon EMR que ejecute la versión 6.5 o posterior, define los parámetros al enviar el trabajo. O bien, utiliza la configuración predeterminada de Spark; /etc/spark/conf/spark-defaults.conf. Para obtener más información, consulta Uso de un clúster de Iceberg con Spark.
Para configurar los parámetros, ejecuta el siguiente comando spark-submit:
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
Nota: Sustituye CROSS_ACCOUNT_ID por tu ID entre cuentas, **amzn-s3-demo-bucket/**prefix por la ubicación y el prefijo de tu bucket de S3 y my_catalog por tu catálogo.
Alternativa:
Utiliza la siguiente configuración de spark-defaults:
] } "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",
{
[
Nota: Sustituye CROSS_ACCOUNT_ID por tu ID entre cuentas y amzn-s3-demo-bucket por la ubicación de tu bucket de S3.
Información relacionada
Leer una tabla de Iceberg de Amazon S3 con Spark