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

全國(guó)咨詢/投訴熱線:400-618-4000

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

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

Spark SQL兼容Hive,這是因?yàn)镾park SQL架構(gòu)與Hive底層結(jié)構(gòu)相似,Spark SQL復(fù)用了Hive提供的元數(shù)據(jù)倉(cāng)庫(kù)(Metastore)、HiveQL、用戶自定義函數(shù)(UDF)以及序列化和反序列工具(SerDes),下面通過(guò)圖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快速的計(jì)算效率得益于Catalyst優(yōu)化器。從HiveQL被解析成語(yǔ)法抽象樹(shù)起,執(zhí)行計(jì)劃生成和優(yōu)化的工作全部交給Spark SQL的Catalyst優(yōu)化器進(jìn)行負(fù)責(zé)和管理。

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

Spark SQL工作原理

圖2 Spark SQL工作原理

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

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

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

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

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

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

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

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

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

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




猜你喜歡:

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

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

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

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

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

0 分享到:
和我們?cè)诰€交談!