spark基礎之spark sql執行原理和架構
一 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
- spark執行原理、模型Spark模型
- 【Spark】 Spark作業執行原理--獲取執行結果Spark
- Spark原理-物理執行圖Spark
- Spark 系列(九)—— Spark SQL 之 Structured APISparkSQLStructAPI
- Spark基礎Spark
- 《深入理解Spark》之Spark的整體執行流程Spark
- 如何掌握Spark和Hadoop的架構SparkHadoop架構
- Spark系列 - (3) Spark SQLSparkSQL
- Q:Spark和Hadoop的架構區別SparkHadoop架構
- Spark叢集和任務執行Spark
- Spark SQL原始碼解析(五)SparkPlan準備和執行階段SparkSQL原始碼
- PySpark和SparkSQL基礎:如何利用Python程式設計執行Spark(附程式碼)SparkSQLPython程式設計
- MySQL基礎架構執行流程MySql架構
- spark學習筆記--叢集執行SparkSpark筆記
- Spark SQL:4.對Spark SQL的理解SparkSQL
- scala基礎語法-----Spark基礎Spark
- 自適應查詢執行:在執行時提升Spark SQL執行效能SparkSQL
- Spark SQL / Catalyst 內部原理 與 RBOSparkSQL
- Spark架構與原理這一篇就夠了Spark架構
- Spark之spark shellSpark
- spark學習筆記--Spark SQLSpark筆記SQL
- Hive on Spark和Spark sql on Hive,你能分的清楚麼HiveSparkSQL
- Hive on Spark 和 Spark sql on Hive,你能分的清楚麼HiveSparkSQL
- Spark SQL 教程: 通過示例瞭解 Spark SQLSparkSQL
- Spark SQL 教程: 透過示例瞭解 Spark SQLSparkSQL
- 解析MySQL基礎架構及一條SQL語句的執行流程和流轉MySql架構
- Spark之HiveSupport連線(spark-shell和IDEA)SparkHiveIdea
- Spark SQL | Spark,從入門到精通SparkSQL
- spark2.2.0 配置spark sql 操作hiveSparkSQLHive
- 檢視spark程式執行狀態以及安裝sparkSpark
- Spark SQL學習——DataFrame和DataSetSparkSQL
- spark sql語句效能最佳化及執行計劃SparkSQL
- 10.spark sql之快速入門SparkSQL
- Spark on Yarn 和Spark on MesosSparkYarn
- Spark API 全集(1):Spark SQL Dataset & DataFrame APISparkAPISQL
- Spark 系列(十一)—— Spark SQL 聚合函式 AggregationsSparkSQL函式
- Spark Streaming + Spark SQL 實現配置化ETSparkSQL
- Spark學習(二)——RDD基礎Spark