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

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