Quero usar o Spark com o Amazon EMR ou o AWS Glue para interagir com o Apache Iceberg a partir de um catálogo de dados do AWS Glue entre contas.
Resolução
Defina os seguintes parâmetros para usar o Spark para interagir com as tabelas do Apache Iceberg do catálogo de dados do 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
Você pode definir esses parâmetros de várias maneiras, dependendo se você usa um trabalho do AWS Glue ou um cluster do Amazon EMR.
Para trabalhos do AWS Glue, use parâmetros de tarefa. Por exemplo:
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
Para um cluster do Amazon EMR que executa a versão 6.5 ou posterior, defina os parâmetros ao enviar a tarefa. Ou use a configuração padrão do Spark (/etc/spark/conf/spark-defaults.conf). Para obter mais informações, consulte Usar um cluster Iceberg com o Spark.
Observação: Para cenários entre contas, você sempre deve usar a propriedade glue.id para especificar o ID correspondente do catálogo de dados do AWS Glue (ID da conta da AWS).
Se você estiver usando o Amazon EMR versão 6.5 ou posterior, use a seguinte configuração 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://<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",
{
[
Observação: O trabalho do Amazon EMR ou do AWS Glue deve ter permissões suficientes do AWS Identity and Access Management (IAM) para acessar o catálogo de dados do AWS Glue entre contas. Para obter mais informações, consulte Fazer uma chamada de API entre contas.
Informações relacionadas
Leia uma tabela Iceberg do Amazon S3 usando o Spark