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

AWS Glue/Spark写入SQL Server遇JAR签名信息冲突问题求助

问题修复:AWS Glue/Spark写入SQL Server时签名信息不匹配错误

错误原因分析

出现的java.lang.SecurityException是因为同一个包下的类签名信息不匹配,通常由以下原因导致:

  • 手动指定的mssql-jdbc驱动版本与spark-mssql-connector依赖的JDBC版本冲突
  • AWS Glue环境自带了某个版本的SQL Server JDBC驱动,与你引入的版本重复加载
  • 重复创建SparkSession导致配置混乱,依赖包加载冲突

具体修复步骤

1. 移除重复创建SparkSession的代码

Glue作业启动时已经初始化好了SparkSession,无需通过spark.builder.getOrCreate()重新创建,这会导致配置冲突。修改代码如下:

def write_df_to_target(self, df, schema_table):
    # 直接使用Glue提供的spark_session,不要重新创建
    spark = self.gc.spark_session
    credentials = self.get_credentials(self.replica_connection_name)

    df.write \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", f"{credentials['url']};databaseName={self.database_name}") \
        .option("dbtable", schema_table) \
        .option("user", credentials["user"]) \
        .option("password", credentials["password"]) \
        .option("batchsize","50000") \
        .option("numPartitions","150") \
        .option("bulkCopyTableLock","true") \
        .save()

2. 统一依赖版本,避免冲突

spark-mssql-connector已经内置了对mssql-jdbc的依赖,无需手动指定JDBC驱动版本,否则容易出现版本不兼容。在Glue作业配置中统一指定依赖:

  • 打开Glue作业的Job parameters,添加以下参数:
    --conf spark.jars.packages=com.microsoft.azure:spark-mssql-connector_2.12:1.1.0
    

3. 优先加载用户指定的依赖(解决环境自带驱动冲突)

如果Glue环境自带了旧版本的SQL Server驱动,需要让用户指定的依赖优先加载,在Job parameters中添加:

--conf spark.driver.userClassPathFirst=true
--conf spark.executor.userClassPathFirst=true

4. 清理重复的JAR包

检查Glue作业的Dependent JARs配置,如果之前上传过单独的mssql-jdbc JAR包,立即删除,避免重复加载导致签名冲突。

验证方案

完成上述修改后,重新运行Glue作业,批量写入SQL Server的操作应该可以正常执行。如果仍有问题,可以尝试升级spark-mssql-connector到最新兼容版本(比如1.2.0),确保与Glue的Spark版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:45:30