2012-04-03 58 views
5

我正在使用Hive JDBC驅動程序對我的HDFS數據存儲執行sql查詢。我一直在嘗試使用c3p0來處理連接池。我不太確定這是否是正確的方法,因爲Hive查詢可能會花費相當長的時間,這意味着連接將持續很長時間不會被釋放回池中,我正在努力想出最大數量的正確設置數在c3p0配置中的連接也是如此。彙集Hive JDBC連接的最佳實踐是什麼

有什麼最佳做法來彙集配置單元jdbc連接? C3P0? DBCP?

MAX_POOL_SIZE如何?是否應該比RDB的正常設置更大?

回答

4

哦,太好了,所以你提到的線程的問題實際上是由我問很久以前:) 這將會是有趣的,看看如何使用,在您的使用案例。

但讓我告訴你Hive根據需要隨時啓動Hadoop作業,具體取決於您的查詢。 因此,如果您想要執行多個查詢,我相信這是您想要在此處執行的操作,則需要使用可同時運行多個作業的作業調度程序。 Hadoop默認使用先進先出(FIFO)調度程序,從工作隊列中提取作業。所以,想切換到公平調度程序或容量調度程序。

公平份額調度程序背後的核心思想是將資源分配給作業,使得平均而言,隨着時間的推移,每份作業都獲得相同份額的可用資源。

容量調度程序共享公平調度程序的一些原則,但也有明顯區別。首先,爲大型集羣定義容量調度,這些大型集羣可能有多個獨立的消費者和目標應用程序。在容量調度中,不是創建池,而是創建幾個隊列,每個隊列都具有可配置的映射數量和減少的插槽。每個隊列也被分配一個保證容量(其中,羣集的總容量是每個隊列容量的總和)。其次,能夠排列隊列中的工作的優先級。最後,隊列中是否存在嚴格的訪問控制。

+0

感謝您的信息。我在這裏仍然有點困惑,如果我將10個JDBC連接集中到Hive,這是否意味着我同時打開了10個hive作業?工作完成後會發生什麼?該jdbc連接釋放回池?下一次新的查詢將需要jdbc連接並且有一個新的配置單元作業?那麼通過在這裏使用jdbc連接池,我只能創建/刪除jdbc連接,從而獲得哪些好處? – Shengjie 2012-04-10 14:42:00

+0

到目前爲止,我所瞭解的是,您可以打開多個連接到MySql或Hive用作Metastore的任何DBMS,但底線是,當您觸發複雜查詢時,配置單元將依次創建MapReduce作業以獲取來自Hive倉庫,在你的情況下是HDFS。 – 2012-04-10 18:54:55

+0

繼續...我使用的池是有點像線程。我保留說10個線程連接配置一臺服務器,這取決於我的羣集的容量。一個查詢說'從員工選擇姓名'會佔用一個線程。另一個這樣的查詢,可能會說,佔用另一個線程等等。當查詢結束時,我會返回(簽入)與該查詢相關聯的線程回到線程池。 – 2012-04-10 18:55:18