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

PySpark通过JDBC读取RDS MySQL报通信链路故障如何解决?

PySpark JDBC连接RDS MySQL通信失败解决方案

pymysql可正常连接说明网络、安全组、账号权限均无异常,问题出在JDBC驱动配置层面,可按以下步骤逐一排查修正:

1. 修正JDBC连接参数,补充必要的驱动配置

当前将用户名密码直接写在URL的方式对MySQL CJ驱动兼容性不佳,同时缺少必要的时区、SSL相关参数,修改代码如下:

spark = SparkSession.builder.config("spark.jars", mysql_jar) \
            .master("local[*]").appName("PySpark_MySQL_test").getOrCreate()
df= spark.read.format("jdbc")\
            .option("url", "jdbc:mysql://hostname.amazonaws.com:1150/dbname?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true") \
            .option("driver", "com.mysql.cj.jdbc.Driver")\
            .option("dbtable", "table_name")\
            .option("user", "user_name")\
            .option("password", "password")\
            .load()

核心参数说明:

  • useSSL=false:RDS如果没有强制开启SSL验证,关闭SSL可避免驱动默认的SSL握手失败问题,若需使用SSL连接替换为useSSL=true&requireSSL=true即可
  • serverTimezone:CJ驱动强制要求指定时区,和RDS实例时区保持一致即可,国内常用Asia/Shanghai,也可填UTC
  • allowPublicKeyRetrieval=true:避免密码验证阶段的公钥获取失败报错
  • 用户名密码单独通过option传递,避免URL解析错误

2. 检查MySQL驱动版本兼容性

使用的mysql-connector-javajar包版本需要和RDS MySQL版本匹配:

  • 若RDS MySQL为5.7版本,建议使用mysql-connector-java-5.1.49.jar,此时驱动类需改为com.mysql.jdbc.Driver
  • 若RDS MySQL为8.0及以上版本,建议使用mysql-connector-java-8.0.30.jar,驱动类用com.mysql.cj.jdbc.Driver
    不要使用过高或过低的驱动版本,避免版本不兼容导致的通信失败。

3. 验证Spark环境的jar包加载是否正常

可在初始化SparkSession之后加一行验证代码,确认jar包是否正确加载:

print(spark.sparkContext.getConf().get("spark.jars"))

确认输出路径和实际mysql jar包路径一致,避免路径写错导致驱动未加载的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:45:02