跳至内容

如何在 Spark 中将 Apache Iceberg 与跨账户 AWS Glue Data Catalog 配合使用?

2 分钟阅读
0

我想将 Apache Spark 与 Amazon EMR 或 AWS Glue 配合使用,以便在另一个 AWS 账户的 AWS Glue Data Catalog 中与 Apache Iceberg 进行交互。

解决方法

将 Spark 与 AWS Glue Data Catalog 中的 Apache Iceberg 表配合使用,请在您的 AWS Glue 作业或 Amazon EMR 集群中设置参数。

Amazon EMR 或 AWS Glue 作业必须具有 AWS Identity and Access Management (IAM) 权限才能访问跨账户 AWS Glue Data Catalog。有关详细信息,请参阅在 AWS Glue 中授予跨账户访问权限的方法

您必须使用 Catalog.Id 属性指定 AWS Glue Data Catalog 所在账户的 ID。有关详细信息,请参阅执行跨账户 API 调用

在 AWS Glue 中设置参数

对于 AWS Glue 作业,设置作业参数

作业参数示例:

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

**注意:**将 CROSS_ACCOUNT_ID 替换为您的跨账户 ID,将 amzn-s3-demo-bucket 替换为您的 S3 存储桶位置。

在 Amazon EMR 中设置参数

对于运行 6.5 版或更高版本的 Amazon EMR 集群,请在提交作业时设置参数。或者,使用 Spark 默认配置 /etc/spark/conf/spark-defaults.conf。有关详细信息,请参阅将 Iceberg 集群与 Spark 配合使用

要设置参数,请运行以下 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

**注意:**将 CROSS_ACCOUNT_ID 替换为您的跨账户 ID,将 **amzn-s3-demo-bucket/**prefix 替换为您的 S3 存储桶位置和前缀,将 my_catalog 替换为您的目录。

-或-

使用以下 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",  
    {  
[

**注意:**将 CROSS_ACCOUNT_ID 替换为您的跨账户 ID,将 amzn-s3-demo-bucket 替换为您的 S3 存储桶位置。

相关信息

使用 Spark 从 Amazon S3 读取 Iceberg 表

AWS 官方已更新 2 个月前