首頁(yè)技術(shù)文章正文

Spark3.0的新特性有哪些?【大數(shù)據(jù)開(kāi)發(fā)】

更新時(shí)間:2023-07-11 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

對(duì)比2.4版本, 3.0在TPC-DS基準(zhǔn)測(cè)試中,性能超過(guò)2.4版本, 達(dá)到了2倍的提升。關(guān)于Spark 3.0,有以下的新特性:

1.Adaptive Query Execution 自適應(yīng)查詢(SparkSQL)

由于缺乏或者不準(zhǔn)確的數(shù)據(jù)統(tǒng)計(jì)信息(元數(shù)據(jù))和對(duì)成本的錯(cuò)誤估算(執(zhí)行計(jì)劃調(diào)度)導(dǎo)致生成的初始執(zhí)行計(jì)劃不理想在Spark3.x版本提供Adaptive Query Execution自適應(yīng)查詢技術(shù)通過(guò)在”運(yùn)行時(shí)”對(duì)查詢執(zhí)行計(jì)劃進(jìn)行優(yōu)化, 允許Planner在運(yùn)行時(shí)執(zhí)行可選計(jì)劃,這些可選計(jì)劃將會(huì)基于運(yùn)行時(shí)數(shù)據(jù)統(tǒng)計(jì)進(jìn)行動(dòng)態(tài)優(yōu)化, 從而提高性能。

Adaptive Query Execution AQE主要提供了三個(gè)自適應(yīng)優(yōu)化:

? 動(dòng)態(tài)合并 Shuffle Partitions

? 動(dòng)態(tài)調(diào)整Join策略

? 動(dòng)態(tài)優(yōu)化傾斜Join(Skew Joins)

動(dòng)態(tài)合并 Dynamically coalescing shuffle partitions

可以動(dòng)態(tài)調(diào)整shuffle分區(qū)的數(shù)量。用戶可以在開(kāi)始時(shí)設(shè)置相對(duì)較多的shuffle分區(qū)數(shù),AQE會(huì)在運(yùn)行時(shí)將相鄰的小分區(qū)合并為較大的分區(qū)。

動(dòng)態(tài)合并

動(dòng)態(tài)調(diào)整Join策略 Dynamically switching join strategies

此優(yōu)化可以在一定程度上避免由于缺少統(tǒng)計(jì)信息或著錯(cuò)誤估計(jì)大小(當(dāng)然也可能兩種情況同時(shí)存在),而導(dǎo)致執(zhí)行計(jì)劃性能不佳的情況。這種自適應(yīng)優(yōu)化可以在運(yùn)行時(shí)sort merge join轉(zhuǎn)換成broadcast hash join,從而進(jìn)一步提升性能。

Adaptive Query Execution 自適應(yīng)查詢(SparkSQL)

動(dòng)態(tài)優(yōu)化傾斜Join

skew joins可能導(dǎo)致負(fù)載的極端不平衡,并嚴(yán)重降低性能。在AQE從shuffle文件統(tǒng)計(jì)信息中檢測(cè)到任何傾斜后,它可以將傾斜的分區(qū)分割成更小的分區(qū),并將它們與另一側(cè)的相應(yīng)分區(qū)連接起來(lái)。這種優(yōu)化可以并行化傾斜處理,獲得更好的整體性能。

觸發(fā)條件:

分區(qū)大小 > spark.sql.adaptive.skewJoin.skewedPartitionFactor (default=10) * "median partition size(中位數(shù)分區(qū)大小)"

分區(qū)大小 > spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes (default = 256MB)

總結(jié):

(1) AQE的開(kāi)啟通過(guò): spark.sql.adaptive.enabled 設(shè)置為true開(kāi)啟。

(2) AQE是自動(dòng)化優(yōu)化機(jī)制, 無(wú)需我們?cè)O(shè)置復(fù)雜的參數(shù)調(diào)整, 開(kāi)啟AQE符合條件即可自動(dòng)化應(yīng)用AQE優(yōu)化。

(3) AQE帶來(lái)了極大的SparkSQL性能提升。

2.Dynamic Partition Pruning 動(dòng)態(tài)分區(qū)裁剪(SparkSQL)

當(dāng)優(yōu)化器在編譯時(shí)無(wú)法識(shí)別可跳過(guò)的分區(qū)時(shí),可以使用"動(dòng)態(tài)分區(qū)裁剪",即基于運(yùn)行時(shí)推斷的信息來(lái)進(jìn)一步進(jìn)行分區(qū)裁剪。這在星型模型中很常見(jiàn),星型模型是由一個(gè)或多個(gè)并且引用了任意數(shù)量的維度表的事實(shí)表組成。在這種連接操作中,我們可以通過(guò)識(shí)別維度表過(guò)濾之后的分區(qū)來(lái)裁剪從事實(shí)表中讀取的分區(qū)。在一個(gè)TPC-DS基準(zhǔn)測(cè)試中,102個(gè)查詢中有60個(gè)查詢獲得2到18倍的速度提升。

動(dòng)態(tài)分區(qū)裁剪

3. 增強(qiáng)的Python API: PySpark和Koalas

Python現(xiàn)在是Spark中使用較為廣泛的編程語(yǔ)言,因此也是Spark 3.0的重點(diǎn)關(guān)注領(lǐng)域。Databricks有68%的notebook命令是用Python寫(xiě)的。PySpark在Python Package Index上的月下載量超過(guò)500 萬(wàn)。

很多Python開(kāi)發(fā)人員在數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析方面使用pandas API,但僅限于單節(jié)點(diǎn)處理。Databricks會(huì)持續(xù)開(kāi)發(fā)Koalas——基于Apache Spark的pandas API實(shí)現(xiàn),讓數(shù)據(jù)科學(xué)家能夠在分布式環(huán)境中更高效地處理大數(shù)據(jù)。

經(jīng)過(guò)一年多的開(kāi)發(fā),Koalas實(shí)現(xiàn)對(duì)pandas API將近80%的覆蓋率。Koalas每月PyPI下載量已迅速增長(zhǎng)到85萬(wàn),并以每?jī)芍芤淮蔚陌l(fā)布節(jié)奏快速演進(jìn)。雖然Koalas可能是從單節(jié)點(diǎn)pandas代碼遷移的最簡(jiǎn)單方法,但很多人仍在使用PySpark API,也意味著 PySpark API也越來(lái)越受歡迎。

新版Koalas類(lèi)庫(kù)可以讓我們寫(xiě)Pandas API(Koalas提供)然后將它們運(yùn)行在分布式的Spark環(huán)境上, Pandas開(kāi)發(fā)者也能快速上手Spark。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!