教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Spark SQL架構的工作原理和工作流程是什么?

更新時間:2021年03月23日11時14分 來源:傳智播客 瀏覽次數:

Spark SQL兼容Hive,這是因為Spark SQL架構與Hive底層結構相似,Spark SQL復用了Hive提供的元數據倉庫(Metastore)、HiveQL、用戶自定義函數(UDF)以及序列化和反序列工具(SerDes),下面通過圖1深入了解Spark SQL底層架構。

Spark SQL架構

圖1 Spark SQL架構

從圖1中可以看出,Spark SQL架構與Hive架構相比,除了把底層的MapReduce執(zhí)行引擎更改為Spark,還修改了Catalyst優(yōu)化器,Spark SQL快速的計算效率得益于Catalyst優(yōu)化器。從HiveQL被解析成語法抽象樹起,執(zhí)行計劃生成和優(yōu)化的工作全部交給Spark SQL的Catalyst優(yōu)化器進行負責和管理。

Catalyst優(yōu)化器是一個新的可擴展的查詢優(yōu)化器,它是基于Scala函數式編程結構,Spark SQL開發(fā)工程師設計可擴展架構主要是為了在今后的版本迭代時,能夠輕松地添加新的優(yōu)化技術和功能,尤其是為了解決大數據生產環(huán)境中遇到的問題(例如,針對半結構化數據和高級數據分析),另外,Spark作為開源項目,外部開發(fā)人員可以針對項目需求自行擴展Catalyst優(yōu)化器的功能。下面通過圖2描述Spark SQL的工作原理。

Spark SQL工作原理

圖2 Spark SQL工作原理

Spark要想很好地支持SQL,就需要完成解析(Parser)、優(yōu)化(Optimizer)、執(zhí)行(Execution)三大過程。Catalyst優(yōu)化器在執(zhí)行計劃生成和優(yōu)化的工作時候,它離不開自己內部的五大組件,具體介紹如下所示。

Parse組件:該組件根據一定的語義規(guī)則(即第三方類庫ANTLR)將SparkSql字符串解析為一個抽象語法樹/AST。
Analyze組件:該組件會遍歷整個AST,并對AST上的每個節(jié)點進行數據類型的綁定以及函數綁定,然后根據元數據信息Catalog對數據表中的字段進行解析。
Optimizer組件:該組件是Catalyst的核心,主要分為RBO和CBO兩種優(yōu)化策略,其中RBO是基于規(guī)則優(yōu)化,CBO是基于代價優(yōu)化。
SparkPlanner組件:優(yōu)化后的邏輯執(zhí)行計劃OptimizedLogicalPlan依然是邏輯的,并不能被Spark系統(tǒng)理解,此時需要將OptimizedLogicalPlan轉換成physical plan(物理計劃)。
CostModel組件:主要根據過去的性能統(tǒng)計數據,選擇最佳的物理執(zhí)行計劃。

在了解了上述組件的作用后,下面分步驟講解Spark SQL工作流程。

1. 在解析SQL語句之前,會創(chuàng)建SparkSession,涉及到表名、字段名稱和字段類型的元數據都將保存在Catalog中;

2. 當調用SparkSession的sql()方法時就會使用SparkSqlParser進行解析SQL語句,解析過程中使用的ANTLR進行詞法解析和語法解析;

3. 接著使用Analyzer分析器綁定邏輯計劃,在該階段,Analyzer會使用Analyzer Rules,并結合Catalog,對未綁定的邏輯計劃進行解析,生成已綁定的邏輯計劃;

4. 然后Optimizer根據預先定義好的規(guī)則(RBO)對 Resolved Logical Plan 進行優(yōu)化并生成 Optimized Logical Plan(最優(yōu)邏輯計劃);

5. 接著使用SparkPlanner對優(yōu)化后的邏輯計劃進行轉換,生成多個可以執(zhí)行的物理計劃Physical Plan;

6. 接著CBO優(yōu)化策略會根據Cost Model算出每個Physical Plan的代價,并選取代價最小的 Physical Plan作為最終的Physical Plan;

7. 最終使用QueryExecution執(zhí)行物理計劃,此時則調用SparkPlan的execute()方法,返回RDD。




猜你喜歡:

Spark與Hadoop有哪些區(qū)別?【大數據培訓】

SparkMllib如何解決回歸問題?[大數據培訓]

怎樣操作Spark SQL性能調優(yōu)?

Spark SQL通過JDBC連接MySQL讀寫數據

傳智教育大數據項目開發(fā)培訓

0 分享到:
和我們在線交談!