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

SageMaker Studio本地模式PySpark连接S3凭证配置问题

原因说明:无参数初始化boto3可正常访问S3的逻辑

SageMaker Studio运行环境默认绑定了预置权限的执行角色,boto3内置默认凭证提供链,会按固定优先级自动从多个位置加载完整鉴权信息:

  • 读取进程环境变量中AWS_前缀的凭证参数
  • 读取用户目录下~/.aws/credentials、~/.aws/config的配置内容
  • 调用SageMaker环境内置的元数据服务接口,获取当前执行角色对应的临时会话凭证

SageMaker环境中分配的角色凭证属于临时凭证,鉴权必须同时携带access_key、secret_key、session_token三个参数。之前手动调用session.get_credentials()后仅提取了前两个字段,遗漏了必填的会话令牌,因此无论传给boto3客户端还是PySpark的S3A配置,都会因鉴权参数不全被服务拒绝。无参数初始化boto3客户端时,SDK会自动加载完整的三个鉴权参数,因此可以正常访问S3。

PySpark连接S3的配置方法

有两种可行方案,第二种无需手动管理凭证,稳定性更高。

方案1:手动提取完整凭证配置

  1. 提取完整的临时凭证,使用get_frozen_credentials()获取固定的有效凭证集合,避免凭证自动刷新导致的参数不一致问题:
    import boto3
    session = boto3.Session()
    credentials = session.get_credentials().get_frozen_credentials()
    access_key = credentials.access_key
    secret_key = credentials.secret_key
    session_token = credentials.token
    
  2. 初始化SparkSession时补全S3A文件系统的必填配置,除密钥外还要指定会话令牌和临时凭证提供者类,否则S3A连接器不会识别会话令牌参数:
    import sagemaker_pyspark
    from pyspark.sql import SparkSession
    
    classpath = ":".join(sagemaker_pyspark.classpath_jars())
    spark = SparkSession.builder \
        .config("spark.driver.extraClassPath", classpath) \
        .config("fs.s3a.access.key", access_key) \
        .config("fs.s3a.secret.key", secret_key) \
        .config("fs.s3a.session.token", session_token) \
        .config("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider") \
        .getOrCreate()
    
  3. 配置完成后可通过读取S3路径验证连通性:
    # 替换为实际可访问的S3文件路径
    test_df = spark.read.csv("s3a://target-bucket/test.csv")
    test_df.show()
    

方案2:使用默认凭证链自动加载(推荐)

不需要手动提取、传递任何凭证参数,直接配置S3A连接器使用和boto3一致的默认凭证提供链即可,连接器会自动完成凭证加载、过期刷新的全流程,不存在参数遗漏、凭证过期失效的问题:

import sagemaker_pyspark
from pyspark.sql import SparkSession

classpath = ":".join(sagemaker_pyspark.classpath_jars())
spark = SparkSession.builder \
    .config("spark.driver.extraClassPath", classpath) \
    .config("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.DefaultAWSCredentialsProviderChain") \
    .getOrCreate()

该方案是SageMaker Studio本地模式运行PySpark作业连接S3的标准实践。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:42:25