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

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

大數(shù)據(jù)Spark 3.0有哪些新特性?

更新時間:2023年03月22日14時50分 來源:傳智教育 瀏覽次數(shù):

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

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

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

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

• 動態(tài)合并 Shuffle Partitions

• 動態(tài)調(diào)整Join策略

• 動態(tài)優(yōu)化傾斜Join(Skew Joins)

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

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

動態(tài)合并

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

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

Adaptive Query Execution 自適應查詢(SparkSQL)

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

skew joins可能導致負載的極端不平衡,并嚴重降低性能。在AQE從shuffle文件統(tǒng)計信息中檢測到任何傾斜后,它可以將傾斜的分區(qū)分割成更小的分區(qū),并將它們與另一側(cè)的相應分區(qū)連接起來。這種優(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的開啟通過: spark.sql.adaptive.enabled 設置為true開啟。

(2) AQE是自動化優(yōu)化機制, 無需我們設置復雜的參數(shù)調(diào)整, 開啟AQE符合條件即可自動化應用AQE優(yōu)化。

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

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

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

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

3. 增強的Python API: PySpark和Koalas

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

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

經(jīng)過一年多的開發(fā),Koalas實現(xiàn)對pandas API將近80%的覆蓋率。Koalas每月PyPI下載量已迅速增長到85萬,并以每兩周一次的發(fā)布節(jié)奏快速演進。雖然Koalas可能是從單節(jié)點pandas代碼遷移的最簡單方法,但很多人仍在使用PySpark API,也意味著 PySpark API也越來越受歡迎。

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

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