Linux环境下PySpark集成认证连接SQL Server 2016报错如何解决?
问题核心原因
你犯了最基础的平台适配错误:mssql-jdbc_auth-9.2.1.x64.dll是Windows系统下的动态链接库,完全无法在Linux环境下加载使用,同时你也没有正确配置JVM查找本地库的路径。
修复步骤
- 第一步:替换正确的Linux平台认证库
从微软JDBC驱动包的/auth/x64/目录下找到对应版本的libmssql-jdbc_auth-9.2.1.x64.so文件,上传到你的Linux机器的/home/user1/目录下,给文件加执行权限:chmod +x /home/user1/libmssql-jdbc_auth-9.2.1.x64.so - 第二步:修改PySpark脚本配置
删掉spark.driver.extraClassPath里的dll路径,新增JVM本地库路径配置,修改后的脚本如下:from pyspark.sql import SparkSession spark = SparkSession.builder.appName('Connection-Test')\ .config('spark.driver.extraClassPath','/home/user1/mssql-jdbc-9.2.1.jre8.jar')\ .config('spark.driver.extraJavaOptions', '-Djava.library.path=/home/user1/')\ .getOrCreate() spark.read.format("jdbc")\ .option("url","jdbc:sqlserver://prodsqlserver.domainName.com:3341;databaseName=PHOENIX_DW;integratedSecurity=true")\ .option("dbtable","DWH.AGENT")\ .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")\ .load()\ .show() - 第三步:修改spark-submit提交命令,新增本地库路径参数:
spark2-submit --driver-class-path /home/user1/mssql-jdbc-9.2.1.jre8.jar \ --jars /home/user1/mssql-jdbc-9.2.1.jre8.jar \ --conf spark.executor.extraJavaOptions="-Djava.library.path=/home/user1/" \ ReadData.py - 可选补充:如果你的Linux环境已经配置了域认证(Kerberos),需要提前执行
kinit 你的域账号获取有效票据后再运行任务。
内容的提问来源于stack exchange,提问作者Sidd
相关产品推荐
相关产品推荐

