分散式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

TAG:分散式計算 | SQL | 大數據 | NewSQL | 分散式資料庫 |