使用amazon/aws-glue-libs容器连接RDS MySQL遇JDBC驱动缺失问题求助
解决AWS Glue本地Docker容器连接MySQL的JDBC驱动问题
先排查驱动是否存在
进入容器bash后,先查Glue的依赖目录里有没有MySQL驱动:
- 执行
ls /opt/aws-glue-libs/jars/ | grep mysql,看有没有mysql-connector-java-*.jar这类文件。没有的话,就是本地容器缺驱动包。 - 也可以顺带查下Spark默认驱动目录:
ls /usr/lib/spark/jars/ | grep mysql,部分环境会把JDBC驱动放这儿。
手动补装驱动包
确认缺驱动的话,按下面步骤来:
- 下载对应版本的MySQL Connector/J驱动(注意和你RDS MySQL版本匹配,比如8.x版本对应
com.mysql.cj.jdbc.Driver)。 - 把本地下载的jar包复制进容器:
docker cp /本地文件路径/mysql-connector-java-8.0.30.jar <你的容器ID>:/opt/aws-glue-libs/jars/ - 要是不想本地下载,也可以进入容器后,直接获取对应版本的jar包放到
/opt/aws-glue-libs/jars/目录下。 - 重启Glue会话或者重新跑你的PySpark代码,让驱动加载生效。
验证驱动类有效性
在容器里用Java命令验证驱动类能不能被找到:
cd /opt/aws-glue-libs/jars/ java -cp mysql-connector-java-8.0.30.jar com.mysql.cj.jdbc.Driver
没报错就说明驱动类没问题;要是还提示找不到,要么是驱动版本下错了,要么是类路径没指定对。
代码里的额外检查点
- 确认代码里的
driver参数是com.mysql.cj.jdbc.Driver(对应MySQL 8.x),要是用的是MySQL 5.x,得改成com.mysql.jdbc.Driver,别搞混版本。 - 也可以在初始化Spark会话时手动指定驱动路径,比如在PySpark代码开头加:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("MySQLConnection") \ .config("spark.driver.extraClassPath", "/opt/aws-glue-libs/jars/mysql-connector-java-8.0.30.jar") \ .config("spark.executor.extraClassPath", "/opt/aws-glue-libs/jars/mysql-connector-java-8.0.30.jar") \ .getOrCreate()
内容的提问来源于stack exchange,提问作者writes_on
相关产品推荐
相关产品推荐

