Tehokas skaalauksen alentaminen ja etäsekoitushallinta

Koskee:✅ Fabric-data-insinöörit ja datatiede

Tehokas skaalaus on Microsoft Fabric Sparkin ominaisuus, joka irrottaa Sparkin sekoitusdatan suorittajan elinkaaresta. Sen sijaan, että shuffle-tulostus kiinnitettäisiin paikallisille suorituslevyille, Fabric Spark reitittää shuffle-datan Azure Blob Storage -ohjelmaan (tai siirtää sen sinne tarpeen mukaan) ja antaa Adaptive Query Executyn (AQE) muokata kirjoituksen itse. Tuloksena on nopeampi klusterin skaalaus, alhaisempi laskentakustannus ja kestävämmät työtehtävät – ilman muutoksia kyselyissä, muistikirjoissa tai putkissa.

Yleiskatsaus

Tehokas skaalausleikkaus perustuu neljään yhteistyökykyyn:

Ominaisuus Toiminnot
Etäohjaus (RSM) Kirjoittaa ja lukee shuffle-dataa Azure Blob Storage -laitteeseen suorituslaitteiden sijaan.
Sekoitussiirtymä Liikkeet sekoittavat estoja suorittajan pois ennen sen poistamista, sen sijaan että pudottaisiin heidät.
Päätöskerros Vaihekohtainen ajonaikainen reititys, joka pitää pienet sekoitukset paikallisina ja siirtää suuret sekoitukset etätallennustilaan.
AQE Shuffle Write Adaptive Query Execution osallistuu shuffle-kirjoitusvaiheeseen, jotta osiointi on oikein ensimmäisellä kerralla.

Edellytykset

  • Natiivisuoritusmoottori (NEE) on oltava käytössä.
  • Autoscale käytössä (suositeltava). Tehokas skaalaus toimii myös ilman automaattista skaalautumista alla olevien Spark-asetusten kautta.
  • Kesto 1.3 (Apache Spark 3.5) tai uudempi.

Näin se toimii

Kun Spark käsittelee kyselyä, se usein jakaa dataa vaiheiden välillä – sekoitus. Normaalisti sekoitusdata tallennetaan kunkin suorittajan paikalliselle levylle, joka sitoo suorittajat kyseiseen dataan. Niitä ei voi julkaista ennen kuin jokainen kuluttaja on lukenut loppuun. Tuo kytkentä on suurin syy siihen, miksi klusterit eivät voi skaalauda nopeasti ja miksi toimeenpanijan menettäminen aiheuttaa kalliita vaiheen yrityksiä.

Tehokas skaalausleikkaus rikkoo tämän kytkennän:

  • Large shuffles menevät suoraan Azure Blob Storage:een Remote Shuffle Managerin kautta.
  • Pienet sekoitukset pysyvät paikallisella levyllä nopeuden vuoksi. Jos heidän toimeenpanijansa täytyy myöhemmin vapauttaa, Shuffle Migration siirtää lohkot vertaisverkkoon tai taustalla varatallennukseen.
  • Päätöskerros valitsee oikean polun per vaihe ajonaikaisesti.
  • AQE Shuffle Write varmistaa, että kirjoittaja tuottaa osiointia, jonka AQE kuluttaa alavirran ilman uudelleenkoalesoimista, välttäen hukkaan menneen I/O:n.
                ┌───────────────────────────┐
   Query  ───►  │   AQE + Decision Layer    │   per-stage choice
                └─────────────┬─────────────┘
                              │
                ┌─────────────▼─────────────┐
                │   AQE Shuffle Write       │   partition-aware writer
                └─────┬─────────────────┬───┘
                      │                 │
              local   ▼                 ▼   remote
        ┌────────────────────┐   ┌──────────────────┐
        │  Local disk +      │   │  RSM → Azure     │
        │  Shuffle Migration │   │  Blob Storage    │
        └─────────┬──────────┘   └─────────┬────────┘
                  │ on decommission        │
                  ▼                        ▼
        fallback storage   Remote shuffle store

Älykäs reititys (Decision Layer)

Päätöskerros arvioi jokaisen sekoitusvaihdon ja päättää:

  • Suuria kahinoita → Azure Blob Storage. Maksimaalinen skaalaus- ja vikasietoisuushyöty.
  • Pienet sekoitukset → paikalliselle levylle. Ei pilvi-I/O-ylikuormitusta pienille siirroille. Jos toimeenpanija myöhemmin poistaa käytöstä, Shuffle Migration ottaa ohjat.

Reititys on automaattista eikä vaadi käyttäjän syötettä. Suositeltu tarkkuus on vaiheittain.

Keskeiset edut

Alhaisemmat kustannukset: Maksa vain käyttämästäsi laskennasta

Tehokkaan skaalauksen avulla toimeenpanijat vapautetaan heti, kun heidän työnsä on tehty. Ne eivät enää istu käyttämättöminä pitämässä sekoitusdataa, jonka myöhemmät tehtävät saattavat lopulta lukea.

  • Nopeampi skaalaus. Autoscale poistaa solmut heti tehtävän suorittamisen jälkeen.
  • Vähemmän tyhjäkäyntilaskentaa. Ei "zombie"-teloittajia, joita pidetään hengissä vain palvelemassa paikallista sekoitusta.
  • Ei levyn yliproquestointia. Suuret sekoitukset menevät blob-tallennustilaan sen sijaan, että vaadittaisiin suuria paikallisia levyjä.
  • Rajoitettu säilytyskustannus. Varavarasto siivotaan automaattisesti, kun lohkoja ei enää tarvita.

Kestävämmät työpaikat

Kun sekoitusdata on vain paikallisella levyllä, suorittajan kaatuminen tarkoittaa, että data katoaa ja Sparkin täytyy laskea se uudelleen. Tehokkaassa skaalauslaskussa data on joko jo blob-tallennuksessa tai siirretty sinne ennen kuin toimeenpanija katoaa.

Esimerkkitilanne Ilman tehokasta skaalausta Tehokkaalla skaalauksen vähentämisellä
Executor kaatuu Tietojen sekoittaminen menetetty; Vaiheet uudelleen toteutettu Data on turvassa tallennuksessa; ei uudelleenlaskentaa
Solmujen etuoikeus Data menetetty, kalliit uusintayritykset Data säilyy; Työ jatkuu normaalisti
Sulava poistaminen palveluksesta Shuffle keskeytettiin sammutuksessa Lohkot siirrettiin vertais- tai varamuistiin
Verkon häiriöt noudon aikana Kaskadit FetchFailedException Lukemat tulevat varastosta, ilman muutoksia

Tämä poistaa yleisimmän tuotannon FetchFailedException syyn.

Nopeampi, aidosti joustava skaalaus

Ilman tehokasta skaalausta automaattinen skaalaus ei voi ottaa solmua takaisin, kun mikään sen suorittaja säilyttää edelleen sekoitusdataa tai välimuistissa olevaa dataa. Tehokas skaalausalas irrottaa molemmat:

  • Sekoitusdata on blob-muistissa (tai siirtyy sinne sammutuksen yhteydessä).
  • Välimuisti ei enää kiinnitä suorittajia. Toistettavat välimuistit, kuten Delta-snapshot-välimuisti, on suljettu pois skaalauksen suojauksesta.

Autoscaler voi vapaasti poistaa käyttämättömiä solmuja ja muuttaa klusterin kokoa työkuorman muutosten mukaan.

Parempi suorituskyky vinoilla ja suurilla sekoituksilla

AQE Shuffle Write antaa Adaptive Query Execution muovata shuffle-kirjoituksen itsensä—valitsemalla osiot, jonka alavirran AQE kuluttaa ilman uudelleenkoalesoimista, ja tuottaa vähemmän ja paremmin kokoisia lohkoja etätallennukseen. Yhdistettynä Decision Layeriin saat nopeamman seinäkellon käytön suurissa/vinossa kyselyissä ja muuttumattoman viiveen pienissä.

Get started

Sovella tätä asetusta, jotta koko tehokas skaalauspino voidaan laskea:

# Remote Shuffle Manager
spark.conf.set("spark.remote.shuffle.enabled", "true")

# Decision Layer — per-stage routing of local vs. remote shuffle
spark.conf.set("spark.sql.rsm.decisionlayer.enabled.level", "stage")

# AQE participates in shuffle write
spark.conf.set("spark.sql.adaptive.shuffleWrite.enabled", "true")

# Shuffle Migration on executor decommission
spark.conf.set("spark.storage.decommission.shuffleBlocks.enabled", "true")
spark.conf.set("spark.storage.decommission.shuffleBlocks.cleanup", "true")
spark.conf.set("spark.storage.decommission.shuffleBlocks.migrateToFallbackStorage", "true")
spark.conf.set("spark.storage.decommission.fallbackStorage.cleanUp", "true")

Koodin muutoksia ei tarvita. Voit myös asettaa nämä ympäristösi Spark-ominaisuuksiin.

Määritysviittaus

Etäohjaus (RSM)

Setting Suositellut Mitä se hallitsee
spark.remote.shuffle.enabled true Tehokkuuden skaalaus on päällä. Shuffle-data siirtyy Azure Blob Storage -palveluun suoritusohjelman paikallisten levyjen sijaan.

Päätöskerros

Setting Suositellut Mitä se hallitsee
spark.sql.rsm.decisionlayer.enabled.level stage Tarkkuus, jossa päätöskerrosreitit sekoittuvat. stage arvioi jokaisen Spark-vaiheen itsenäisesti.

AQE Shuffle Write

Setting Suositellut Mitä se hallitsee
spark.sql.adaptive.shuffleWrite.enabled true Annetaan AQE:n osallistua shuffle-kirjoitusvaiheeseen. Tuottaa jakautumisen, jonka alavirran AQE kuluttaa ilman, että se yhdistyy uudelleen.

Muistio

AQE itsessään (spark.sql.adaptive.enabled) täytyy olla päällä. Se on oletuksena päällä Fabric Sparkissa.

Shuffle Migration käytöstä poiston yhteydessä

Setting Suositellut Mitä se hallitsee
spark.storage.decommission.shuffleBlocks.enabled true Migrat, sekoituslohkot pois toimeenpanijasta, joka on poistamassa käytöstä, sen sijaan että pudottaisi heidät.
spark.storage.decommission.shuffleBlocks.cleanup true Puhdistaa shuffle blockit lähdesuorittajasta onnistuneen siirron jälkeen.
spark.storage.decommission.shuffleBlocks.migrateToFallbackStorage true Jos mikään vertaissuorittaja ei pysty hyväksymään lohkoja, siirtää ne vara-tallennustilaan (Azure Blob Storage).
spark.storage.decommission.fallbackStorage.cleanUp true Poistaa shuffle blockit varavarastosta, kun niitä ei enää tarvita, rajoittaen tallennuskustannuksia.

Välimuistitietoinen dynaaminen allokaatio

Setting Suositellut Mitä se hallitsee
spark.dynamicAllocation.preventShutdownExecutorWithCache false Mahdollistaa dynaamisen allokoinnin suorittajien vapauttamiseen, vaikka ne pitäisivät välimuistissa olevia lohkoja.
spark.dynamicAllocation.excludeDeltaSnapshotCache true Jättää huomiotta Delta-snapshot-välimuistin, kun päätetään, pitääkö executor edelleen hyödyllistä välimuistia. Delta-snapshot-välimuisti on toistettavissa eikä sen pitäisi estää skaalautumista.

Edistynyt viritys (RSM)

Useimpien käyttäjien ei tarvitse muuttaa näitä oletusasetuksia.

Kirjoitussuorituskyky

Setting Oletus Mitä se hallitsee
spark.remote.shuffle.partition.buffersize 16777216 (16 MB) Puskuri per osio ennen tallennustilaan kirjoittamista.
spark.remote.shuffle.blocksize 8388608 (8 MB) Yksittäisten lohkojen koko, jotka on ladattu Blob Storage:iin.
spark.remote.shuffle.write.maxthreads cores × 16 Suurin säikeet, joita käytetään sekoitusdatan kirjoittamiseen.
spark.remote.shuffle.write.maxtasks 16384 Maksimimääräiset samanaikaiset kirjoitusoperaatiot.

Lue suorituskyky

Setting Oletus Mitä se hallitsee
spark.remote.shuffle.read.parallel.enabled true Rinnakkaiset latausvirrat sekoituslukuihin.
spark.remote.shuffle.read.parallelism 4 Rinnakkaiset latausvirrat per tehtävä.
spark.remote.shuffle.read.prefetchqueuesize 250 Esilataa jonon syvyys lukujen aikana.
spark.remote.shuffle.read.maxthreads cores × 4 Lukemiseen käytettävät säikeet maksimimuodossa.

Luotettavuus

Setting Oletus Mitä se hallitsee
spark.remote.shuffle.retries 5 Yritä uudelleen tilapäisiä tallennusvirheitä.
spark.remote.shuffle.retrydelayms 800 Alkuperäinen perääntyminen yritysten välillä.
spark.remote.shuffle.retrymaxdelayms 60000 Peruutuskatto.

Tiivistys

Setting Oletus Mitä se hallitsee
spark.remote.shuffle.compression Käyttö spark.io.compression.codec Pakkausmuoto etäsekoitusdatalle (esim. lz4, zstd).

Suorituskykytulokset

Kaavio, joka osoittaa laskentakustannussäästöjä tehokkaan skaalaamisen sallittua verrattuna pois käytöstä TPC-DS vertailukohtaan, osoittaen 54 prosentin kustannusten vähenemistä.

Kustannussäästöt (TPC-DS vertailukohta)

Metrinen Ilman tehokasta skaalausta Tehokkaalla skaalauksen vähentämisellä
Kokonaislaskenta (VM-Minutes) 14,952 6,880
Kustannusten vähentäminen 54%

Kokonaistyön suoritusaika voi olla pidempi (automaattinen skaalaus käyttää vähemmän samanaikaisia suorittajia), mutta laskutettu laskenta vähenee yli puoleen.

Päätöskerroksen suorituskyky (TPC-DS, RSM päällä)

Pienten sekoitusten reitittäminen paikalliselle levylle ja vain suurten siirtojen etätallennustilaan tuottaa jopa 57% parannuksen ajonaikaisesti verrattuna jokaisen sekoituksen reitittämiseen etänä, samalla skaalaushyödyllä.

Rajoitukset

  • NEE vaaditaan. Tehokas skaalauslasku riippuu Native Execution Enginestä.
  • Azure Blob Storage only. Vakio BlockBlobStorage HNS pois päältä. Azure Data Lake Gen2 / HNS-yhteensopivia tilejä ei tueta etäsekoitusvarastona.
  • Ei tue Azure Private Link. Yksityislinkkiverkkoja käyttävät ympäristöt eivät tällä hetkellä ole yhteensopivia.
  • Päätöskerroksen tarkkuus on tällä hetkellä vaiheittain. Tehtäväkohtainen tai osiokohtainen reititys ei kuulu laajuuteen.
  • Välimuistin käyttäytyminen muuttuu. Kohdalla, jotka preventShutdownExecutorWithCache=falsetallentavat cache()/persist() dataa pitävät suorittajat, voidaan skaalata pienemmäksi. Työkuormat, jotka ovat vahvasti riippuvaisia suorittajan paikallisesta välimuistista kuumalle datalle, pitäisi validoida.