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

Docker中PySpark读取S3遇SSLPeerUnverifiedException及依赖问题求助

解决PySpark读取S3时SSLPeerUnverifiedException证书SAN不匹配问题

问题背景

在基于python:3.9-slim-buster的Docker容器中运行PySpark 3.3.1任务,已添加hadoop-aws:3.3.1、aws-java-sdk-bundle:1.11.901依赖JAR,配置S3访问密钥及endpoint为s3.amazonaws.com,但读取s3a://sample.datasets时抛出SSLPeerUnverifiedException,提示<sample.datasets.s3.amazonaws.com>的证书与主题备用名称不匹配。

可行解决方案

1. 强制使用路径样式访问

S3虚拟主机格式(bucket.s3.amazonaws.com)会触发证书匹配问题,切换为路径样式访问可直接规避。在PySpark脚本中添加以下配置:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("S3ReadTask") \
    .config("spark.hadoop.fs.s3a.path.style.access", "true") \
    .config("spark.hadoop.fs.s3a.endpoint", "s3.amazonaws.com") \
    .config("spark.hadoop.fs.s3a.access.key", "YOUR_ACCESS_KEY") \
    .config("spark.hadoop.fs.s3a.secret.key", "YOUR_SECRET_KEY") \
    .getOrCreate()

路径样式会将请求改为https://s3.amazonaws.com/sample.datasets/xxx,与证书的主题备用名称完全匹配。

2. 修正Hadoop AWS依赖版本兼容性

PySpark 3.3.1对应的官方Hadoop版本为3.3.2,而非3.3.1,版本不匹配会导致底层SSL逻辑异常。替换为兼容的JAR包:

  • 更换hadoop-aws版本为3.3.2
  • aws-java-sdk-bundle:1.11.901仍可兼容,若问题持续,可尝试升级至1.11.1026(Hadoop 3.3.2推荐配套版本)

3. 更新容器内CA证书

Debian slim镜像默认CA证书可能不全,导致无法正常验证S3的SSL证书。在Dockerfile中添加证书更新步骤:

RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && update-ca-certificates

4. 临时禁用SSL验证(仅测试环境)

若以上方法均无效,且处于测试环境,可临时关闭SSL证书验证(生产环境禁止使用):

spark = SparkSession.builder \
    .appName("S3ReadTask") \
    .config("spark.hadoop.fs.s3a.connection.ssl.enabled", "false") \
    .getOrCreate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:02:08