Direkt zum Inhalt

Wie verwende ich Apache Iceberg mit einem kontoübergreifenden AWS-Glue-Datenkatalog in Spark?

Lesedauer: 2 Minute
0

Ich möchte Apache Spark mit Amazon EMR oder AWS Glue verwenden, um mit Apache Iceberg aus einem AWS-Glue-Datenkatalog in einem anderen AWS-Konto zu interagieren.

Lösung

Um Spark mit Apache-Iceberg-Tabellen aus dem AWS-Glue-Datenkatalog zu verwenden, lege Parameter im AWS-Glue-Auftrag oder Amazon-EMR-Cluster fest.

Der Amazon-EMR- oder AWS-Glue-Auftrag muss über AWS Identity and Access Management (IAM)-Berechtigungen verfügen, um auf den kontoübergreifenden AWS-Glue-Datenkatalog zuzugreifen. Weitere Informationen findest du unter Methoden zur Gewährung des kontoübergreifenden Zugriffs in AWS Glue.

Du musst die Eigenschaft Catalog.Id verwenden, um die ID des Kontos anzugeben, in dem sich der AWS-Glue-Datenkatalog befindet. Weitere Informationen findest du unterEinen kontoübergreifenden API-Aufruf durchführen

Parameter in AWS Glue festlegen

Lege für AWS-Glue-Aufträge die Auftragsparameter fest.

Beispiel für Auftragsparameter:

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

Hinweis: Ersetze CROSS_ACCOUNT_ID durch deine kontoübergreifende ID, amzn-s3-demo-bucket durch deinen S3-Bucket-Standort.

Parameter in Amazon EMR festlegen

Lege für einen Amazon-EMR-Cluster, auf dem Version 6.5 oder höher ausgeführt wird, die Parameter fest, wenn du den Auftrag absendest. Oder verwende die Spark-Standardkonfiguration /etc/spark/conf/spark-defaults.conf. Weitere Informationen findest du unter Einen Iceberg-Cluster mit Spark verwenden.

Führe den folgenden Befehl spark-submit aus, um die Parameter festzulegen:

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

Hinweis: Ersetze CROSS_ACCOUNT_ID durch deine kontoübergreifende ID, **amzn-s3-demo-bucket/**prefix durch deinen S3-Bucket-Standort und deinen Präfix und my_catalog durch deinen Katalog.

-oder-

Verwende die folgende spark-defaults-Konfiguration:

]    }          "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",  
    {  
[

Hinweis: Ersetze CROSS_ACCOUNT_ID durch deine kontoübergreifende ID, amzn-s3-demo-bucket durch deinen S3-Bucket-Standort.

Ähnliche Informationen

Eine Iceberg-Tabelle von Amazon S3 mit Spark lesen

AWS OFFICIALAktualisiert vor 2 Monaten