分散式SQL執行引擎核心是什麼?Fragment、Stage、Subplan等概念有什麼區別?
分散式SQL執行引擎(Impala、Drill、Presto、Spark SQL、HAWQ、Google F1)里,經常會使用Fragment、Stage、Subplan、Slice來劃分Plan,這些概念的主要區別是什麼? 分散式SQL執行引擎的核心技術是什麼?
Impala的執行計劃分為若干fragment,每個fragment表示一段相同的計算,分為若干fragment instance並發執行。
SparkSQL的執行計劃分為若干stage,每個stage由若干task並發執行。
HAWQ的執行計劃分為若干slice,slice之間有依賴關係,在不同數據分片上執行的相同slice組成gang。(和其他幾個執行框架不同,細究的話實際上含義略有區別)
Presto的執行計劃劃分為若干個subplan,每個subplan可以有多個並發執行。
OceanBase的分散式執行計劃分為若干個job,每個job表示相同的計算,由若干個task在不同輸入上並發執行。
所以,基本概念上就是兩層,叫法不同。這些概念就我所知可以追溯到volcano的exchange operator以及離線作業調度的DAG模型。
一般來說,一個執行計劃可以在阻塞性操作的地方切分不同stage,例如join,聚集,排序等。
那麼,一個分散式執行框架的核心問題就是(用SparkSQL術語):
1. 如何劃分stage?2. 如何確定每個stage的並發度?如何劃分數據才「均勻」?3. task之間如何交換數據,是流式還是物化?
4. 如何高效調度執行?如何考慮負載均衡?5. 如何容災?6. 對ACID資料庫來說,還有一條,如何控制事務?不同系統的目標不同,設計權衡也不同,所以才會有這麼多輪子。只熟悉HAWQ和Impala
1,HAWQ中的slice
可以理解為segment上的一個獨立的邏輯執行單元(在多個segments上並行執行:邏輯一致,數據不同),HAWQ的query plan會切分為若干個slice,slice間一定是motion(數據交互節點)為劃分。
看個老圖吧:
refer:About HAWQ Query Processing
2,Impala中的fragment
和hawq的slice非常相近,只不過數據交換節點叫:Exchange。比如(虛線劃分fragment):
其他系統中相信也是類似的概念,核心就是如何更有效的並行加速執行。
沒啥區別 概念類似東西只是取不同名字核心技術是優化器
推薦閱讀:
※零基礎學習Python數據分析:數據處理模塊Pandas使用(3)
※大數據計數原理1+0=1這你都不會算(五)No.55
※知識布局-大數據-基礎組件學習
※大數據架構師技能
※提高Spark姿勢水平 No.73