本文只是針對當前特定環境下,出現的問題找不到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驅動。是否安裝,我不肯定(集羣咱們管理不了)。但願看到該文章的讀者清楚這個事情。