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

2021-08-09 21:42:07 字數 1894 閱讀 6202

一 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學習 6 之SparkSQL基礎

一 spark sql的基礎 1 spark sql的簡介 spark sql is apache spark s module for working with structured data spark sql 是apache spark用來出來結構化資料的模組 特點 1 容易整合成,安裝好sp...

SPARK基礎概念

可以認為應用是多次批量計算組合起來的過程,在物理上可以表現為你寫的程式包 部署配置。應用的概念類似於計算機中的程式,它只是乙個藍本,尚沒有執行起來。spark學習筆記三 spark原理介紹 spark最重要的api,使用者邏輯與spark集群主要的互動介面,它會和cluster master互動,包...

spark基礎學習

1 基礎介紹 spark是基於記憶體的大資料平行計算框架。具有高容錯性所謂高容錯性 高可伸縮性。伸縮性就是可以利用大量廉價的硬體機器進行分布式部署。高容錯性此處引入了血緣依賴在子rdd中儲存了父rdd的相關資訊,當出現問題就可以回溯找到最初的資料,重新執行確保資料不丟失。這時候可以設定快取,尤其是重...