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

Spark无法加载AWS S3桶文件的问题排查求助

解决Spark读取S3数据时的403 Forbidden错误

针对你遇到的S3访问403错误,以下是几个关键排查和解决方向:

1. 严格匹配Spark与hadoop-aws版本

Spark和hadoop-aws的版本必须对应,否则会出现兼容性问题:

  • Spark 2.4.x 适配 hadoop-aws 2.7.x ~ 2.9.x
  • Spark 3.0.x及以上 适配 hadoop-aws 3.2.x及以上
    你可以通过spark-submit --version查看当前Spark依赖的Hadoop版本,再选择对应版本的hadoop-aws包。比如Spark依赖Hadoop 3.2.0的话,配置如下:
spark = SparkSession.builder\
                     .config("spark.jars.packages","org.apache.hadoop:hadoop-aws:3.2.0")\
                     .getOrCreate()

2. 改用Spark配置注入AWS凭证

环境变量可能无法被Spark的JVM进程正确读取,建议直接在SparkSession中配置凭证:

from pyspark.sql import SparkSession
import configparser

config = configparser.ConfigParser()
config.read_file(open('aws/credentials.cfg'))

spark = SparkSession.builder\
                     .config("spark.jars.packages","org.apache.hadoop:hadoop-aws:对应版本")\
                     .config("spark.hadoop.fs.s3a.access.key", config['AWS']['AWS_ACCESS_KEY_ID'])\
                     .config("spark.hadoop.fs.s3a.secret.key", config['AWS']['AWS_SECRET_ACCESS_KEY'])\
                     .getOrCreate()

df = spark.read.csv("s3a://datalakesexamp1/payment.csv")

3. 强制启用S3 V4签名(针对旧版hadoop-aws)

hadoop-aws 2.7.x默认使用已被多数S3区域弃用的V2签名,需要强制开启V4签名:

spark = SparkSession.builder\
                     .config("spark.jars.packages","org.apache.hadoop:hadoop-aws:2.7.7")\
                     .config("spark.hadoop.fs.s3a.access.key", config['AWS']['AWS_ACCESS_KEY_ID'])\
                     .config("spark.hadoop.fs.s3a.secret.key", config['AWS']['AWS_SECRET_ACCESS_KEY'])\
                     .config("spark.hadoop.fs.s3a.signing-algorithm", "S3SignerType")\
                     .getOrCreate()

4. 验证IAM权限与桶策略

  • 确认你的AWS密钥对应的IAM用户拥有s3:GetObject和s3:ListBucket权限,示例权限策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject", "s3:ListBucket"],
            "Resource": [
                "arn:aws:s3:::datalakesexamp1",
                "arn:aws:s3:::datalakesexamp1/*"
            ]
        }
    ]
}
  • 检查S3桶的桶策略,确认没有限制该IAM用户的访问(比如IP白名单、拒绝规则等)。

5. 确认S3路径格式

确保使用s3a://协议,这是Hadoop官方推荐的S3访问协议,避免使用已过时的s3://或s3n://。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:00:59