我們運行一個dbx的工作,使用jdbc連接到三on-prem數據庫(SQL Server)。偶爾會去錯誤的服務器的一個連接。
在工作日誌中我們看到com.microsoft.sqlserver.jdbc錯誤”。用戶“xxxxxx SQLServerException:登錄失敗”。我們也記錄使用用戶名和ip地址(排除一個DNS問題我們使用ip地址連接字符串)所以我們某些連接正試圖做什麼。
在SQL Server方麵,我們看到了錯誤“登錄失敗,用戶xxxxxx。”But, on a different server.
我們必須執行查詢的代碼是:
df = (spark.read
.format (jdbc)
.option (" url " f " jdbc::狀態"置疑" / / {ip};數據庫名= {self.connection.database};加密= true; trustServerCertificate = true”)
.option(“查詢”,語句)
.option (“sslProtocol”、“TLSv1.2”)
self.connection.user .option(“用戶”)
.option(“密碼”,pw)
)
ICT檢查ip流量日誌和驗證(雖然無法解釋它)會發生什麼。
最後,給“偶爾”一詞更多的意義……我們的工作每小時運行並執行50 +每運行查詢。我們有這個問題一次5-ish運行(但不可預測)。我們沒有看到任何模式的時機。
@Michel史密特:
很難確定是什麼導致這個問題,但可能會有競爭條件或某種時機問題導致連接去錯服務器了。這裏有幾件事你可以嚐試進行故障排除和解決問題:
嗨Suteja,
謝謝你的冗長的回複。我們也認為這是某種競爭條件。
至於你點……
我們不確定如何影響1/2因為它們磚環境的一部分。
同時,我們不相信4/5/6將如何幫助因為問題是請求去錯服務器了。
這使得1。我們發現有另一個司機,我們這,看看是否對你有幫助。
在代碼:
df = (spark.read.format('sqlserver') .option('host', ip) .option('user', connection.user) .option('password', pw) .option('database', connection.database) .option('sslProtocol', 'TLSv1.2') .option('trustServerCertificate', 'true') .option('encrypt', 'true') .option(query_or_table, statement) )
我們需要等待,看看這解決了問題。
謝謝,
米歇爾
嗨Suteja,
不幸的是這種變化並沒有解決問題。看著例外和堆棧跟蹤看起來完全相同的代碼,所以:
spark.read.format (jdbc)
和
spark.read.format(' '狀態"置疑")
實際上是相同的。
我們現在的“解決方案”,基本上是連接再次當我們有這個異常。我們現在一直在做的這幾個星期,可以確認這個錯誤發生時,第二個連接請求總是成功。
歡呼,
米歇爾