解決JDBC和ODBC連接問題

了解如何排除Databricks JDBC和ODBC連接錯誤。

寫的亞當Pavlacka

最後發布日期:2022年8月15日

本文提供的信息可幫助您對Databricks JDBC/ODBC服務器與BI工具和數據源之間的連接進行故障排除。

語句執行後獲取結果集很慢

查詢執行後,可以通過調用next ()方法。結果集反複。如果緩衝的行用完,此方法會觸發對驅動程序Thrift服務器的請求,以便取回一批行。我們發現批處理的大小顯著影響性能。大多數JDBC/ODBC驅動程序中的默認值都過於保守,我們建議您將其設置為至少100,000。如果無法訪問此配置,請聯係BI工具提供商。

創建連接時超時/異常

一旦有了服務器主機名,就可以在終端上運行以下測試,以檢查到倉庫的連通性。

curl https://:/sql/protocolv1/o/0/ -H "Authorization: Basic $(echo -n 'token:' | base64)"

如果連接超時,請檢查連接的網絡設置是否正確。

TTransportException

如果響應包含TTransportException(錯誤是預期的),就像下麵這樣,這意味著網關運行正常,並且您已經傳遞了有效的憑據。如果您無法連接相同的憑據,請檢查您正在使用的客戶端是否已正確配置並且正在使用最新的Simba驅動程序(版本>= 2.6.22)

HTTP ERROR: 500

訪問/ cliiservice出錯。原因:

 javax.servlet.ServletException: org.apache.thrift.transport.TTransportException

引用臨時視圖

如果響應包含該消息沒有找到表或視圖:SPARK..temp_view . txt這意味著在客戶端應用程序中沒有正確引用臨時視圖。Simba有一個內部配置參數UseNativeQuery它決定查詢在提交到Thrift服務器之前是否被翻譯。默認情況下,該參數被設置為0,在這種情況下,Simba可以修改查詢。特別是,Simba創建了一個自定義#臨時模式用於臨時視圖,它期望客戶端應用程序使用該模式引用一個臨時視圖。您可以通過設置避免使用此特殊別名UseNativeQuery = 1,這將阻止Simba修改查詢。在本例中,Simba將查詢直接發送到Thrift服務器。然而,客戶端需要確保查詢是用Spark期望的方言編寫的,即HiveQL。

總而言之,你有以下選項來處理Simba和Spark上的臨時視圖:

  • UseNativeQuery = 0並通過在視圖名稱前加上#臨時
  • UseNativeQuery = 1並確保查詢是用Spark期望的方言編寫的。

其他錯誤

  • 如果你得到錯誤401年未經授權,檢查你正在使用的憑證:

    HTTP ERROR: 401

    訪問/sql/protocolv1/o/0/test-cluster出錯。原因:

     Unauthorized

    如果使用個人訪問令牌進行身份驗證,請驗證用戶名是否為令牌(而不是您的用戶名),密碼是否為個人訪問令牌(令牌應該以dapi開始)。
  • 回答如下404,未找到通常表示定位指定集群的問題:

    HTTP ERROR: 404

    訪問/sql/protocolv1/o/0/missing-cluster出錯。原因:

     RESOURCE_DOES_NOT_EXIST: No cluster found matching: missing-cluster

  • 如果您在應用程序log4j日誌中看到以下錯誤:
    "org.apache.log4j. log4j. log4j:ERROR "FileAppender對象不能賦值給com.simba.spark.jdbc42.internal.apache.log4j.Appender變量。
    您可以忽略這些錯誤。Simba內部log4j庫是有陰影的,以避免與應用程序中的log4j庫衝突。但是,Simba仍然可能加載應用程序的log4j配置,並嚐試使用一些自定義log4j追加器。這種嚐試在陰影庫中失敗。日誌中仍然捕獲了相關信息。