本文只是针对当前特定环境下,出现的问题找不到sqljdbc驱动的案例。具体出现缘由,多是spark版本问题,也多是集群配置问题。sql
经过--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
提交脚本: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驱动。是否安装,我不肯定(集群咱们管理不了)。但愿看到该文章的读者清楚这个事情。