Spark SQL執行原理和架構

2021-08-10 15:53:08 字數 1896 閱讀 9445

一 spark sql執行架構

spark sql對sql語句的處理和關係型資料庫類似,即詞法/語法解析、繫結、優化、執行。spark sql會先將sql語句解析成一棵樹,然後使用規則(rule)對tree進行繫結、優化等處理過程。spark sql由core、catalyst、hive、hive-thriftserver四部分構成:

core: 負責處理資料的輸入和輸出,如獲取資料,查詢結果輸出成dataframe等

catalyst: 負責處理整個查詢過程,包括解析、繫結、優化等

hive: 負責對hive資料進行處理

hive-thriftserver: 主要用於對hive的訪問

1.1 treenode

邏輯計畫、表示式等都可以用tree來表示,它只是在記憶體中維護,並不會進行磁碟的持久化,分析器和優化器對樹的修改只是替換已有節點。

treenode有2個直接子類,queryplan和expression。queryplam下又有logicalplan和sparkplan. expression是表示式體系,不需要執行引擎計算而是可以直接處理或者計算的節點,包括投影操作,操作符運算等

1.2 rule & ruleexecutor

rule就是指對邏輯計畫要應用的規則,以到達繫結和優化。他的實現類就是ruleexecutor。優化器和分析器都需要繼承ruleexecutor。每乙個子類中都會定義batch、once、fixpoint. 其中每乙個batch代表著一套規則,once表示對樹進行一次操作,fixpoint表示對樹進行多次的迭代操作。ruleexecutor內部提供乙個seq[batch]屬性,裡面定義的是ruleexecutor的處理邏輯,具體的處理邏輯由具體的rule子類實現。

整個流程架構圖:

二 spark sql執行原理

2.1 使用sessioncatalog儲存元資料

在解析sql語句之前,會建立sparksession,或者如果是2.0之前的版本初始化sqlcontext,sparksession只是封裝了sparkcontext和sqlcontext的建立而已。會把元資料儲存在sessioncatalog中,涉及到表名,欄位名稱和字段型別。建立臨時表或者檢視,其實就會往sessioncatalog註冊

2.2 解析sql,使用antlr生成未繫結的邏輯計畫

當呼叫sparksession的sql或者sqlcontext的sql方法,我們以2.0為準,就會使用sparksqlparser進行解析sql. 使用的antlr進行詞法解析和語法解析。它分為2個步驟來生成unresolved logicalplan:

# 詞法分析:lexical analysis,負責將token分組成符號類

# 構建乙個分析樹或者語法樹ast

2.3 使用分析器analyzer繫結邏輯計畫

在該階段,analyzer會使用analyzer rules,並結合sessioncatalog,對未繫結的邏輯計畫進行解析,生成已繫結的邏輯計畫。

2.4 使用優化器optimizer優化邏輯計畫

優化器也是會定義一套rules,利用這些rule對邏輯計畫和exepression進行迭代處理,從而使得樹的節點進行和並和優化

2.5 使用sparkplanner生成物理計畫

sparkspanner使用planning strategies,對優化後的邏輯計畫進行轉換,生成可以執行的物理計畫sparkplan.

2.6 使用queryexecution執行物理計畫

此時呼叫sparkplan的execute方法,底層其實已經再觸發job了,然後返回rdd

spark基礎之spark sql執行原理和架構

一 spark sql執行架構 spark sql對sql語句的處理和關係型資料庫類似,即詞法 語法解析 繫結 優化 執行。spark sql會先將sql語句解析成一棵樹,然後使用規則 rule 對tree進行繫結 優化等處理過程。spark sql由core catalyst hive hive ...

Storm架構執行原理

storm集群主要包含nimbus和supervisor兩部分,集群協調依賴於外部zookeeper。storm特性 1 分布式計算 2 高效能 低延時 3 可擴容 4 高度容錯 5 資料可靠 ack nimbus 集群管理中心,支援ha,負責接收客戶端提交的拓撲 topology 將任務分發給su...

SparkSQL底層執行的原理詳解 面試必備

檢視執行計畫 explain 簡介 spark sql的核心是catalyst優化器,它以一種新穎的方式利用高階程式語言功能 例如scala的模式匹配和quasiquotes 來構建可擴充套件的查詢優化器 sparksql的catalyst優化器是整個sparksql pipeline的中間核心部分...