You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨区域Glue Catalog下通过Glue Spark SQL合并Iceberg表方案咨询

跨区域Glue Job执行Iceberg MERGE INTO的解决方案

问题分析

你遇到的S3 301错误,根源是Glue Job部署在us-west-2区域,默认使用该区域的S3端点,但Iceberg表的存储桶位于us-east-1,跨区域访问时端点不匹配触发重定向。Glue DynamicFrame能正常访问是因为原生组件已处理跨区域端点逻辑,而Spark SQL结合Iceberg使用的Hadoop S3A客户端需要手动指定目标区域的端点。

可行实现方案

方案1:直接配置Iceberg的S3区域端点

在Glue Job的Spark配置中添加以下参数,强制Iceberg客户端使用us-east-1区域的S3端点:

--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.glue_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog
--conf spark.sql.catalog.glue_catalog.warehouse=s3://<你的us-east-1存储桶路径>/warehouse
--conf spark.hadoop.fs.s3a.endpoint=s3.us-east-1.amazonaws.com
--conf spark.hadoop.fs.s3a.region=us-east-1

配置完成后,直接在Spark SQL中引用us-east-1的Iceberg表执行MERGE INTO:

MERGE INTO glue_catalog.<你的数据库名>.<你的Iceberg表名> t
USING (SELECT * FROM <增量数据源>) s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;

方案2:修正LakeFormation共享后的资源链接配置(若坚持使用共享方式)

如果仍通过LakeFormation将us-east-1的数据库/表共享至us-west-2并使用资源链接,需在Glue Job中添加上述S3端点和区域的Spark配置参数,同时确认:

  • 资源链接对应的Iceberg表存储路径正确指向us-east-1的S3桶
  • LakeFormation授予的权限明确包含对该S3桶的读写权限(即使已有超级权限,需确认S3资源的权限覆盖)

关键说明

Iceberg支持通过Hadoop配置指定S3区域和端点,即上述的spark.hadoop.fs.s3a.endpoint和spark.hadoop.fs.s3a.region参数,这两个配置会覆盖Glue Job默认的S3端点设置,确保Iceberg客户端直接访问us-east-1的S3服务。

内容的提问来源于stack exchange,提问作者Arjun Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:17:35