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

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

Spark SQL架構(gòu)的工作原理和工作流程是什么?

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

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

Spark SQL架構(gòu)

圖1 Spark SQL架構(gòu)

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

Catalyst優(yōu)化器是一個新的可擴展的查詢優(yōu)化器,它是基于Scala函數(shù)式編程結(jié)構(gòu),Spark SQL開發(fā)工程師設(shè)計可擴展架構(gòu)主要是為了在今后的版本迭代時,能夠輕松地添加新的優(yōu)化技術(shù)和功能,尤其是為了解決大數(shù)據(jù)生產(chǎn)環(huán)境中遇到的問題(例如,針對半結(jié)構(gòu)化數(shù)據(jù)和高級數(shù)據(jù)分析),另外,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)化的工作時候,它離不開自己內(nèi)部的五大組件,具體介紹如下所示。

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

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

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

2. 當(dāng)調(diào)用SparkSession的sql()方法時就會使用SparkSqlParser進(jìn)行解析SQL語句,解析過程中使用的ANTLR進(jìn)行詞法解析和語法解析;

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

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

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

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

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




猜你喜歡:

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

SparkMllib如何解決回歸問題?[大數(shù)據(jù)培訓(xùn)]

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

Spark SQL通過JDBC連接MySQL讀寫數(shù)據(jù)

傳智教育大數(shù)據(jù)項目開發(fā)培訓(xùn)

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