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

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

Spark3.x中Adaptive Query Execution的自適應(yīng)查詢

更新時(shí)間:2022年02月21日18時(shí)11分 來(lái)源:傳智教育 瀏覽次數(shù):

由于缺乏或者不準(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)

1.動(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)一步提升性能。

     

2.動(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)一步提升性能。

3.動(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ā)條件: 1. 分區(qū)大小> spark.sql.adaptive.skewJoin.skewedPartitionFactor (default=10) * "median partition size(中位數(shù)分區(qū)大小)"

2. 分區(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性能提升。

總結(jié)
0 分享到:
和我們?cè)诰€交談!