Spark on Yarn:java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localho

本文只是针对当前特定环境下,出现的问题找不到sqljdbc驱动的案例。具体出现缘由,多是spark版本问题,也多是集群配置问题。sql

  • yarn-client方式下:

经过--jars参数指定驱动文件位置,提交后提示:“。。。No suitable driver found for jdbc:。。。”;数据库

后来参考到文章:Spark insertIntoJDBC找不到Mysql驱动解决方法 中介绍到:是因为版本问题,致使的咱们程序提交不上去的错误问题。app

因而修改提交参数使用--driver-class-path方式指定驱动包文件的位置,使用client方式提交问题解决了。sqlserver

提交脚本为:测试

#!/bin/sh
spark-submit --deploy-mode client --class MyMain --driver-class-path /app/tt/service/jars/sqljdbc4.jar --num-executors 320 --executor-cores 1 --driver-memory 4g --executor-memory 6g My.jar
  • yarn-cluster方式下:

提交脚本:ui

#!/bin/sh
spark-submit --master yarn-cluster --class MyMain --jars /app/tt/service/jars/sqljdbc4.jar --num-executors 320 --executor-cores 1 --driver-memory 4g --executor-memory 6g My.jar

经过阅读相关文件,了解到:在spark1.4版本以后,--jars指定驱动方式也支持driver驱动系统加载方式。可是,实际测试结果却不是这样子的,使用-driver-class-path和--jars这两种方式指定jdbc驱动包的位置都是不能正确提交到cluster上的。url

须要注意的问题:若是提示未找到jdbc驱动包,请确认你的却驱动包地址是否正确、确认你的包是不是正确的驱动包(好比你是须要sqljdbc,这里就不要填写为ojdbc驱动包。)spa

个人访问sqlserver数据库表的代码书写内容:code

val prop = new Properties()
prop.setProperty("user", "xx")
prop.setProperty("password", "xxxx")
val lnglat_offset_df = hiveContext.read.jdbc("jdbc:sqlserver://localhost\\db_instance_name:1433;DatabaseName=db_name", "[dbo].[tb_test]", prop)

在咱们本身的集群上解决驱动包在cluster方式下提交时,提示:“。。。No suitable driver found for jdbc:。。。”的解决方案:在各个子节点上安装对应的jdbc驱动包。orm

通过找高手帮忙最终解决了该问题,在cluster方式提交不上去的缘由结论:咱们数据库链接方式写的有问题。

正确的代码应该是:

val lnglat_offset_df = hiveContext.read.format("jdbc")
      .options(Map("url" -> "jdbc:sqlserver://localhost\\db_instance_name:1433;DatabaseName=db_name;user=xx;password=xxx",
        "dbtable" -> "dbo.tb_test",
        "driver" -> "com.microsoft.sqlserver.jdbc.SQLServerDriver"))
      .load()

可是,疑问高手在解决问题时是否在各个节点上安装了jdbc驱动。是否安装,我不肯定(集群咱们管理不了)。但愿看到该文章的读者清楚这个事情。

相关文章
相关标签/搜索