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

Spark读取Minio文件遭遇403权限拒绝错误求助

解决Spark读取Minio时403权限拒绝的问题

以下是针对你遇到的403错误的排查和解决步骤:

  • 修正Spark的S3A端点配置
    Spark默认会请求AWS S3服务,必须显式指定Minio的内部端点(容器在同一网络内,不能用localhost:9000,要使用Minio容器的服务名),同时开启路径样式访问。更新你的SparkSession配置:

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder \
        .appName("MinioJsonReader") \
        .config("spark.hadoop.fs.s3a.endpoint", "http://minio:9000")  # 替换为你的Minio容器名
        .config("spark.hadoop.fs.s3a.access.key", "MINIO_ACCESS_KEY")
        .config("spark.hadoop.fs.s3a.secret.key", "MINIO_SECRET_KEY")
        .config("spark.hadoop.fs.s3a.path.style.access", "true")
        .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
        .getOrCreate()
    

    关键:容器间通信要用容器名而非localhost,否则JupyterLab容器会访问自身的9000端口,而非Minio服务。

  • 确认Minio桶的权限策略
    确保你的Minio用户拥有读取iceberg-lake桶内文件的权限。给桶添加如下策略(在Minio UI的桶权限设置中):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": ["arn:aws:s3:::iceberg-lake/*"]
        }
      ]
    }
    

    同时验证该用户是否被授予了该策略,或者用户是否拥有全局读权限。

  • 核对文件路径的准确性
    检查Minio UI中的文件路径是否与代码中的s3a://iceberg-lake/lake/1999/0xxx/CVE-1999-0001.json完全一致,注意Minio对桶名和文件名的大小写是敏感的。

  • 补充Spark的S3A依赖包
    部分Spark镜像可能缺失hadoop-aws相关依赖,导致S3A客户端功能异常。可以在SparkSession中添加依赖包:

    .config("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.3.4,com.amazonaws:aws-java-sdk-bundle:1.12.262")
    

    注意依赖版本要与你的Spark对应的Hadoop版本匹配(例如Spark 3.3.x对应Hadoop 3.3.x)。

  • 重新验证Minio密钥
    确保Spark配置中的access.key和secret.key与Minio控制台生成的密钥完全一致,无多余空格或特殊字符。可以重新生成一对密钥,替换后再次测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:14