Ir para o conteúdo

Como posso usar o Apache Iceberg com um catálogo de dados entre contas do AWS Glue no Spark?

2 minuto de leitura
0

Quero usar o Apache 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 em outra conta da AWS.

Resolução

Para usar o Spark com tabelas do Apache Iceberg a partir do catálogo de dados do AWS Glue, defina parâmetros em seu trabalho do AWS Glue ou em seu cluster do Amazon EMR.

O trabalho do Amazon EMR ou do AWS Glue deve ter permissões do AWS Identity and Access Management (AWS IAM) para acessar o catálogo de dados entre contas do AWS Glue. Para obter mais informações, consulte Métodos de concessão de acesso entre contas no AWS Glue.

Você deve usar a propriedade Catalog.Id para especificar o ID da conta na qual o catálogo de dados do AWS Glue está. Para obter mais informações, consulte Realização de uma chamada de API entre contas.

Defina parâmetros no AWS Glue

Nos trabalhos do AWS Glue, defina os parâmetros do trabalho.

Exemplo de parâmetros de trabalho:

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

Observação: substitua CROSS_ACCOUNT_ID pelo seu ID entre contas e amzn-s3-demo-bucket pela localização do seu bucket do S3.

Defina parâmetros no Amazon EMR

Para um cluster do Amazon EMR que executa a versão 6.5 ou posterior, defina os parâmetros ao enviar o trabalho. Ou use a configuração padrão do Spark /etc/spark/conf/spark-defaults.conf. Para obter mais informações, consulte Usar um cluster do Iceberg com o Spark.

Para definir os parâmetros, execute o seguinte 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

Observação: substitua CROSS_ACCOUNT_ID pelo seu ID entre contas, o prefixo amzn-s3-demo-bucket/ pela localização e prefixo do seu bucket do S3 e my_catalog pelo seu catálogo.

-ou-

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://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",  
    {  
[

Observação: substitua CROSS_ACCOUNT_ID pelo seu ID entre contas e amzn-s3-demo-bucket pela localização do seu bucket do S3.

Informações relacionadas

Leia uma tabela Iceberg do Amazon S3 usando o Spark

AWS OFICIALAtualizada há 4 meses