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