Spark SQL架構(gòu)分析
Spark SQL與傳統(tǒng)DBMS的查詢優(yōu)化器+執(zhí)行器的架構(gòu)較為類似,只不過其執(zhí)行器是在分布式環(huán)境中實現(xiàn),并采用Spark作為執(zhí)行引擎。
Spark SQL的查詢優(yōu)化是Catalyst,其基于Scala語言開發(fā),可以靈活利用Scala原生的語言特性方便地擴展功能,奠定了Spark SQL的發(fā)展空間。
- Catalyst將SQL翻譯成最終的執(zhí)行計劃,并在這個過程中進行查詢優(yōu)化。
- 這里和傳統(tǒng)不太一樣的地方就在于,SQL經(jīng)過查詢優(yōu)化器最終轉(zhuǎn)換為可執(zhí)行的查詢計劃,傳統(tǒng)DB就可以執(zhí)行這個查詢計劃了,但spark不同。
- Spark SQL***執(zhí)行還是會在Spark內(nèi)將執(zhí)行計劃轉(zhuǎn)換為Spark的有向無環(huán)圖DAG再執(zhí)行。
Catalyst的整體架構(gòu)
從圖8-2中可以看到整個Catalyst是Spark SQL的調(diào)度核心,遵循傳統(tǒng)數(shù)據(jù)庫的查詢解析步驟,對SQL進行解析,轉(zhuǎn)換為邏輯查詢計劃和物理查詢計劃,最終轉(zhuǎn)換為Spark的DAG執(zhí)行
Catalyst的執(zhí)行流程

- SqlParser將SQL語句轉(zhuǎn)換為邏輯查詢計劃
- Analyzer對邏輯查詢計劃進行屬性和關(guān)系關(guān)聯(lián)檢驗
- 之后Optimizer通過邏輯查詢優(yōu)化將邏輯查詢計劃轉(zhuǎn)換為優(yōu)化的邏輯查詢計劃
- QueryPlanner將優(yōu)化的邏輯查詢計劃轉(zhuǎn)換為物理查詢計劃
- prepareForExecution調(diào)整數(shù)據(jù)分布
- ***將物理查詢計劃轉(zhuǎn)換為執(zhí)行計劃進入Spark執(zhí)行任務(wù)。
【本文為51CTO專欄作者“王森豐”的原創(chuàng)稿件,轉(zhuǎn)載請注明出處】