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

Spark Streaming写入Iceberg至MinIO时S3 301错误排查求助

问题分析与解决方案

核心问题定位

报错是S3 301重定向,说明Spark/Iceberg访问MinIO时使用的Endpoint地址不正确,导致请求被MinIO要求重定向到正确端点。虽然你能在MinIO中看到元数据,但流式写入阶段的存储路径配置未正确指向MinIO专属Endpoint。

缺失的关键配置

你的Spark提交命令仅配置了Rest Catalog地址,未指定Iceberg底层存储(MinIO)的连接参数,需补充以下MinIO相关配置:

1. 添加MinIO存储连接参数

在spark-submit的--conf列表中加入:

--conf spark.sql.catalog.rest.s3.endpoint=http://minio:9000 \
--conf spark.sql.catalog.rest.s3.path-style-access=true \
--conf spark.sql.catalog.rest.s3.access-key=你的MinIO访问密钥 \
--conf spark.sql.catalog.rest.s3.secret-key=你的MinIO秘密密钥
  • s3.endpoint:Docker环境下填写MinIO容器名+默认端口(如http://minio:9000),确保Spark容器能通过该地址访问MinIO
  • path-style-access=true:MinIO默认使用路径式访问,必须开启,否则会因虚拟主机格式不匹配触发301错误
  • access-key/secret-key:替换为你MinIO实例的实际密钥

2. 修复重复配置

你的命令中重复写了--conf spark.sql.catalog.rest=org.apache.iceberg.spark.SparkCatalog,删除其中一条即可,避免配置冲突。

修正后的完整Spark提交命令

spark-submit \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.7.1,org.apache.spark:spark-sql-kafka-0-10_2.12:3.5.4 \
    --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
    --conf spark.sql.catalog.rest=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.rest.type=rest \
    --conf spark.sql.catalog.rest.uri=http://rest:8181 \
    --conf spark.sql.catalog.rest.s3.endpoint=http://minio:9000 \
    --conf spark.sql.catalog.rest.s3.path-style-access=true \
    --conf spark.sql.catalog.rest.s3.access-key=MINIO_ACCESS_KEY \
    --conf spark.sql.catalog.rest.s3.secret-key=MINIO_SECRET_KEY \
    --conf spark.sql.defaultCatalog=rest \
    test.py

额外检查项

  • 确认Docker网络连通性:Spark容器能通过http://minio:9000访问到MinIO服务
  • 检查表存储路径:若提前创建了db.crypto_metrics5表,需确认其Location配置为MinIO路径(如s3://iceberg-bucket/db/crypto_metrics5)

内容的提问来源于stack exchange,提问作者Rohit Anil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:15:02