Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
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
Suositeltu konfiguraatio
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
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
BlockBlobStorageHNS 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=falsetallentavatcache()/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.
Liittyvä sisältö
- Natiivisuoritusmoottori Fabric Data Engineeringille
Määritä resurssiprofiilit Microsoft Fabric - Autoscale Spark -laskutuksen yleiskatsaus
- Apache Spark -suoritusajat Fabricissa