我們要一個磚PoC客戶和做了一些測試。我們的一個測試數據集包含在一個分區表(15科勒姆)大約是250行,每個分區~ 50 k - 150 k的行。
偶爾我們有數百個並發用戶(一千),每個查詢(sql select)不同的分區。根據
https://community.www.eheci.com/s/question/0D58Y00009ZuIHUSA3/sql-queries-on-databricks
,我隻能跑10並發SQL查詢每個集群。如果我需要同時運行更多的查詢,我可以增加數量的集群/ SQL倉庫(例如,如果我有10集群/ SQL倉庫我可以運行10 x10 = 100個並發查詢,不是嗎?)。我認為類似的行為可以完成更多的“高並發集群”。
或者有其他的可能性如何完成1000的並發查詢的要求嗎?謝謝。
M。
@Marian科瓦克:
是的,你是正確的,每個集群的最大並發數查詢默認磚是10。但是,您可以調整spark.databricks增加這個極限。maxConcurrentRuns配置參數。這個可以設置在每個集群的基礎上通過修改集群配置,或通過修改集群政策在全球水平。
然而,即使這增加限製,一個集群上運行1000個並發查詢可能不是實際由於資源限製。在這種情況下,你確實可以增加集群的數量/ SQL倉庫增加並發限製。此外,您可以考慮使用自動定量集群,可以動態地調整根據工作負載的節點數量,以確保你有足夠的資源來處理負載。
另一個方法是使用查詢緩存來減少並發查詢的數量。如果很多用戶查詢相同的分區,您可以緩存查詢的結果,為後續請求從緩存中。這可以減少查詢的數據庫,提高整體性能。
謝謝你的回複;總而言之,我可以(1)火花集群創建多個集群和/或設置spark.databricks。maxConcurrentRuns增加每個集群的並發性,或(2)SQL倉庫集多個集群在一個SQL倉庫和/或創建多個SQL倉庫。
也許我有一個額外的問題。在並發sql select hive_metastore不知何故瓶頸?當我運行一些sql查詢,有請求hive_metastore“閱讀路徑”,瓶頸可能會導致什麼?如果是的,當我創造更多的火花集群這些集群共享一個hive_metastore嗎?每個集群或hive_metastore緩存甚至每個工人嗎?
和SQL的倉庫,並發SQL查詢是如何影響hive_metastore嗎?
或者你能告訴我這些細節的文檔了嗎?非常感謝你
M。
@Marian科瓦克:
關於額外的問題,使用蜂巢metastore磚存儲元數據的表,視圖和分區在一個中央存儲庫。它通常並不成為一個瓶頸在並發SQL查詢。原因在於metastore沒有參與查詢執行本身,而是在查詢計劃階段,SQL引擎需要解決模式的表查詢。
然而,如果你有大量的並發查詢,可能metastore可能成為瓶頸如果不正確配置或者並發查詢的數量是如此之高,以至於它會導致爭用metastore數據庫的訪問。在這種情況下,您可能需要考慮增加metastore的資源數據庫,甚至分片跨多個實例。
當你創造更多的火花集群,它們共享相同的metastore默認數據庫。metastore每個集群緩存,這意味著每個火花集群維護一個本地緩存元數據,它需要執行的查詢。這個緩存被查詢metastore數據庫定期更新,但更新的頻率可以配置為平衡性能和一致性需求。
同樣,並發在SQL SQL查詢倉庫由蜂巢metastore不受影響。SQL倉庫使用自己的元數據存儲管理模式創建的表和視圖,這個元數據存儲優化的高並發訪問。