使用jdbc查詢impala時的超時問題

背景

項目中應用服務直接通過jdbc連接impala做數據查詢,其他遇到一個問題,查詢impala時因為沒有設置查詢超時,有些大sql一直占用連接,同時這個sql在impala集群中執行著,也占用了impala集群的資源,這樣擠壓了其他sql的響應。所以這時候設置查詢超時,讓連接斷開,空閑出集群資源能夠很大程度上提升服務的穩定性。

解決過程

連接impala的jdbc主要有cloudera jdbc和hive jdbc。因為需要使用kerberos認證來連接impala,最開始同事為了簡單話選擇了hive jdbc,配置kerberos也方便(官方推薦 Cloudera JDBC Connector)。開始用的很爽,但后面發現并不能設置查詢超時(Statement.setQueryTime()無效,但是如果通過hive jdbc連接查詢hive的話是能夠生效的---HIVE-4924,查詢impala卻不行)。最后想查詢下hive jdbc是否還有其他參數能夠設置,通過幾天的尋找,最終卻無果。
后來把目光放在了cloudera jdbc上,通過文檔中的參數,發現一個SocketTimeout參數,并在本地嘗試了cloudera jdbc配置上SocketTimeout這個參數,在自測過程上都出現了大的查詢沒有執行完,因為SocketTimeout時間到了而斷開并拋出socket timeout exception,當時很開心,以為問題解決了,當把這個拿給同事時,同事試了幾次,有時候會timeout斷開,有時候卻根本不斷開,直到sql執行成功返回,基本宣布這個參數失敗。
再一次失敗后,都快覺得這個問題搞不定了,我覺得不太可能是官方定義了一個不靠譜的參數,更可能是自己理解上面的錯誤,后來又反復查看了這個參數的解釋(The number of seconds after which Impala closes the connection with the client application if the connection is idle),一旦連接空閑超過這個時長,impala就會關閉應該客戶端的連接。什么叫connection is idle,以及它為何叫socketTimeout卻不是查詢超時的英文呢?socket是網絡層,而且在參數定義中,說連接空閑,而不是連接占用的時間。有了這些疑問后,又搜索查詢了一番,最終在一篇文章中,很詳細的解釋了jdbc中的各種timeout

Timeout 類別

The higher level timeout is dependent on the lower level timeout. The higher level timeout will operate normally only if the lower level timeout operates normally as well. If the JDBC driver socket timeout does not work properly, then higher level timeouts such as statement timeout and transaction timeout will not work properly either.
Even after the statement timeout was configured, the application still did not recover from the error because the statement timeout did not work at the time of network failure.

Timeout for Each Levels

什么是JDBC的socket timeout?

第4種類型的JDBC使用socket與數據庫連接,數據庫并不對應用與數據庫間的連接超時進行處理。
JDBC的socket timeout在數據庫被突然停掉或是發生網絡錯誤(由于設備故障等原因)時十分重要。由于TCP/IP的結構原因,socket沒有辦法探測到網絡錯誤,因此應用也無法主動發現數據庫連接斷開。如果沒有設置socket timeout的話,應用在數據庫返回結果前會無期限地等下去,這種連接被稱為dead connection。
為了避免dead connections,socket必須要有超時配置。socket timeout可以通過JDBC設置,socket timeout能夠避免應用在發生網絡錯誤時產生無休止等待的情況,縮短服務失效的時間。
不推薦使用socket timeout來限制statement的執行時長,因此socket timeout的值必須要高于statement timeout,否則,socket timeout將會先生效,這樣statement timeout就變得毫無意義,也無法生效。

什么是Statement Timeout?

statement timeout用來限制statement的執行時長,timeout的值通過調用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API進行設置。不過現在開發者已經很少直接在代碼中設置,而多是通過框架來進行設置。
不同的關系型數據庫,以及不同的JDBC驅動,其statement timeout處理過程會有所不同。

通過這篇文章的講解,我知道我之前在hive jdbc配置的Statement.setQueryTime()是statement timeout,它是依賴于更低基本的socket timeout, impala沒有生效的原因很大可能是對于impala的查詢statement并沒有去處理超時(Statement Timeout Execution Process for JDBC Driver),而對hive查詢卻做了處理。
而cloudera jdbc提供了socket timeout參數,也在statement timeout提供了超時的處理,即statement查詢超時后會中斷查詢并拋出java.sql.SQLTimeoutException。所以配置上Statement.setQueryTime(),就能夠在查詢超過timeout值后拋出異常,關閉連接。
最后講queryTimeOut配置入DataSource,與orm結合,查詢超時問題算告一段落。

參考

cloudera jdbc: https://www.cloudera.com/documentation/enterprise/5-11-x/topics/impala_jdbc.html#jdbc_driver_choice
query timeout: https://www.cubrid.org/blog/understanding-jdbc-internals-and-timeout-configuration
帶有kerberos驗證連接impala: http://blog.csdn.net/tlqfreedom/article/details/75220058

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容