1. 程式人生 > >pgpool(3.6.5)的一個巨坑

pgpool(3.6.5)的一個巨坑

在現場環境中突然發現spark application卡死,而卡死的狀態又與普通的阻塞不同,看起來就是執行了一部分job之後,後面的Job都沒有提交了。 而更為詭異的是,如果把指向不用pgpool,而直接用一個普通的pg庫,整個spark application是正常的。 此時猜測可能問題出在driver端程式碼上,發現有一個類似這樣的程式碼: df.write().jdbc(...) 主要就是將df寫成一張pg表。 查看了spark原始碼也很簡單: 1.判斷表是否存在(使用語句為select * from 表名 limit 1) 2.建立表 3.寫資料 檢視pg_stat_activity,發現是有query=select * from 表名 limit 1 語句的,處於idle狀態。 IDEA遠端連spark單步除錯,發現卡住的正是第一步: select * from 表名 limit 1 不用spark,而使用普通的jdbc執行這句話,也存在卡死的狀況。 需要說明的是,查詢的這種表是不存在的,也就是說這句話是會丟擲異常的。不會是pg丟擲了異常,而pgpool未能正確的處理此異常吧?

事實證明,pgpool確實是在處理error message時有問題,9月5日釋出的3.6.6版本修復了此問題:


所以解決方案,就是採用3.6.6版本的pgpool。