Spark SQL架構分析
作者:王森豐
Spark SQL的查詢優化是Catalyst,其基于Scala語言開發,可以靈活利用Scala原生的語言特性方便地擴展功能,奠定了Spark SQL的發展空間。
Spark SQL與傳統DBMS的查詢優化器+執行器的架構較為類似,只不過其執行器是在分布式環境中實現,并采用Spark作為執行引擎。
Spark SQL的查詢優化是Catalyst,其基于Scala語言開發,可以靈活利用Scala原生的語言特性方便地擴展功能,奠定了Spark SQL的發展空間。
- Catalyst將SQL翻譯成最終的執行計劃,并在這個過程中進行查詢優化。
- 這里和傳統不太一樣的地方就在于,SQL經過查詢優化器最終轉換為可執行的查詢計劃,傳統DB就可以執行這個查詢計劃了,但spark不同。
- Spark SQL***執行還是會在Spark內將執行計劃轉換為Spark的有向無環圖DAG再執行。
Catalyst的整體架構
從圖8-2中可以看到整個Catalyst是Spark SQL的調度核心,遵循傳統數據庫的查詢解析步驟,對SQL進行解析,轉換為邏輯查詢計劃和物理查詢計劃,最終轉換為Spark的DAG執行
Catalyst的執行流程

- SqlParser將SQL語句轉換為邏輯查詢計劃
- Analyzer對邏輯查詢計劃進行屬性和關系關聯檢驗
- 之后Optimizer通過邏輯查詢優化將邏輯查詢計劃轉換為優化的邏輯查詢計劃
- QueryPlanner將優化的邏輯查詢計劃轉換為物理查詢計劃
- prepareForExecution調整數據分布
- ***將物理查詢計劃轉換為執行計劃進入Spark執行任務。
【本文為51CTO專欄作者“王森豐”的原創稿件,轉載請注明出處】
責任編輯:趙寧寧
來源:
神算子