使用自定义JDBC连接器连接AWS Glue与Snowflake时遇驱动错误求助
问题描述
通过AWS Glue自定义JDBC连接器对接Snowflake,运行作业调用toDF()将Dynamic Frame转为PySpark DataFrame时触发错误:
File "/tmp/Snowflake_Test_Job.py", line 22, in <module> df1 = Snowflake_New_Connector_node1.toDF() File "/opt/amazon/lib/python3.7/site-packages/awsglue/dynamicframe.py", line 147, in toDF return DataFrame(self._jdf.toDF(self.glue_ctx._jvm.PythonUtils.toSeq(scala_options)), self.glue_ctx) File "/opt/amazon/spark/python/lib/py4j-0.10.9.5-src.zip/py4j/java_gateway.py", line 1321, in __call__ return_value = get_return_value( File "/opt/amazon/lib/python3.7/site-packages/pyspark/sql/utils.py", line 190, in deco return f(*a, **kw) File "/opt/amazon/spark/python/lib/py4j-0.10.9.5-src.zip/py4j/protocol.py", line 326, in get_return_value raise Py4JJavaError( py4j.protocol.Py4JJavaError: An error occurred while calling o95.toDF. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3) (179.39.34.49 executor 2): org.apache.spark.util.TaskCompletionListenerException: null Previous exception in task: Glue ETL Marketplace: JDBC driver failure, driverClassName: net.snowflake.client.jdbc.SnowflakeDriver, error message: No suitable driver found for rendered JDBC URL
已确认JDBC URL符合Snowflake官方规范,尝试更换不同版本snowflake-jdbc包、通过代码创建连接均无效,需解决Snowflake查询正常执行的问题。
解决方案
以下是经过验证的解决步骤,按优先级尝试:
1. 改用AWS Glue官方Snowflake连接器
放弃自定义JDBC连接器,直接使用AWS Marketplace提供的官方Snowflake连接器:
- 在Glue控制台的"连接"页面,选择"创建连接",类型选"Snowflake"
- 配置必填参数:账户名(格式
<account_identifier>.snowflakecomputing.com)、用户名、密码、仓库、数据库、Schema - 作业中直接引用该连接,无需手动管理JDBC驱动包,官方连接器会自动处理依赖和URL渲染
2. 确保JDBC驱动包在所有Executor上可用
如果坚持使用自定义JDBC连接器,需保证驱动包能被Glue的Driver和所有Executor加载:
- 将
snowflake-jdbc-3.13.22.jar上传到S3存储桶(如s3://your-glue-jars/snowflake/) - 在Glue作业配置的Job parameters中添加:
--extra-jars s3://your-glue-jars/snowflake/snowflake-jdbc-3.13.22.jar --conf spark.driver.extraClassPath=s3://your-glue-jars/snowflake/snowflake-jdbc-3.13.22.jar --conf spark.executor.extraClassPath=s3://your-glue-jars/snowflake/snowflake-jdbc-3.13.22.jar - 注意:Glue作业的IAM角色必须有该S3路径的
GetObject权限
3. 验证JDBC URL的渲染逻辑
自定义连接器的URL模板可能存在拼接错误,检查以下点:
- 确保URL模板为标准Snowflake格式:
jdbc:snowflake://${account}.snowflakecomputing.com/?warehouse=${warehouse}&db=${database}&schema=${schema} - 连接器配置中所有变量(如account、warehouse)都已正确赋值,无空值或格式错误
- 手动拼接URL并在本地测试,确认能正常连接Snowflake
4. 检查Glue作业的网络配置
如果Glue作业运行在VPC内,需确保:
- VPC的安全组和网络ACL允许出站访问Snowflake的端口(443)
- 已配置Snowflake的网络规则,允许Glue作业所在VPC的IP段访问
- 若使用私有网络,需配置VPC端点或NAT网关打通网络
5. 升级JDBC驱动包版本
尝试使用较新的Snowflake JDBC驱动包(如4.x版本),旧版本可能存在兼容性问题:
- 下载最新稳定版驱动包,上传到S3后重复步骤2的配置
内容的提问来源于stack exchange,提问作者Nand042090
相关产品推荐
相关产品推荐

