Verimli ölçek küçültme ve uzaktan shuffle yöneticisi

Şunlar için geçerlidir:✅ Doku Veri Mühendisliği ve Veri Bilimi

Verimli küçültme, Microsoft Fabric Spark'ta Spark shuffle verilerini yürütücünün yaşam süresinden ayıran bir özelliktir. Fabric Spark, shuffle çıktısını yerel yürütücü disklerine sabitlemek yerine, shuffle verilerini Azure Blob Depolama’a yönlendirir (veya gerektiğinde buraya taşır) ve Uyarlamalı Sorgu Yürütmenin (AQE) yazma işlemini biçimlendirmesine olanak tanır. Sonuç olarak, daha hızlı küme ölçeklendirmesi, daha düşük hesaplama maliyeti ve daha dayanıklı işler elde edilir - sorgularınızda, defterlerinizde veya pipeline'larınızda hiçbir değişiklik olmadan.

Genel bakış

Verimli ölçek küçültme, birlikte çalışan dört yetenek üzerine kuruludur:

Kapasite Ne yapar?
Uzak Karıştırma Yöneticisi (RSM) Karıştırma verileri, yürütücülerin yerel diskleri yerine Azure Blob Depolama’a yazılır ve buradan okunur.
Karıştırma göçü Blokları silmek yerine, bir yürütücü hizmet dışı bırakılmadan önce shuffle bloklarını üzerinden taşır.
Karar katmanı Küçük shuffle işlemlerini yerel tutan ve büyük shuffle işlemlerini uzak depolamaya aktaran her aşama için çalışma zamanı yönlendirmesi.
AQE Karışık Yazma Uyarlamalı Sorgu Yürütme'nin shuffle yazma aşamasına katılmasını sağlar; böylece bölümleme en baştan doğru olur.

Prerequisites

  • Yerel Yürütme Motorunu (NEE) etkinleştirin.
  • Otomatik ölçeklendirmeyi etkinleştir (önerilir). Verimli ölçeklendirme, bu makalenin ilerleyen bölümlerinde açıklanan Spark konfigürasyonları aracılığıyla otomatik ölçeklenmeden de çalışır.
  • Runtime 1.3 (Apache Spark 3.5) veya sonraki sürüm.

Nasıl çalışır?

Spark bir sorguyu işlediğinde, genellikle verileri aşamalar arasında yeniden dağıtır - bir karıştırma şeklinde. Normalde her işleyici, shuffle verisini yerel diskinde depolar; bu da işleyicileri bu veriye bağımlı kılar. Vasiler, her tüketici okumayı bitirene kadar serbest bırakılamaz. Bu bağlılık, kümelerin hızla küçültülememesinin ve bir executor’un devre dışı kalmasının maliyetli aşama yeniden denemelerine yol açmasının en büyük nedenidir.

Verimli ölçek küçültme bu bağımlılığı ortadan kaldırır:

  • Büyük karıştırmalar, Uzak Karıştırma Yöneticisi aracılığıyla doğrudan Azure Blob Depolama'a gider.
  • Küçük shuffle işlemleri performans için yerel diskte tutulur. Eğer ilgili yürütücünün daha sonra serbest bırakılması gerekirse, shuffle geçişi blokları arka planda eş düğümlere veya yedek depolamaya taşır.
  • Karar katmanı, çalışma zamanında her aşama için doğru yolu seçer.
  • AQE Shuffle Write, yazıcının alt aşamadaki AQE'nin yeniden birleştirme gerektirmeden kullanabildiği bir bölümlendirme üretmesini sağlar ve gereksiz G/Ç'yi önler.
                ┌───────────────────────────┐
   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

Akıllı yönlendirme (karar katmanı)

Karar katmanı, her shuffle değişimini değerlendirir ve şöyle kararlar verir:

  • Büyük shuffle işlemleri → Azure Blob Depolama. Maksimum ölçek küçültme ve hata toleransı avantajı.
  • Küçük karıştırmalar → yerel disk. Çok küçük veri aktarımları için bulut G/Ç ek yükü yok. Çalıştırıcı daha sonra devreden çıkarılırsa, shuffle taşıması devreye girer.

Karar katmanı verileri otomatik olarak yönlendirir ve sizden hiç giriş gerektirmez. Önerilen ayrıntı düzeyi aşama başınadır.

Temel avantajlar

Daha düşük maliyetler: Yalnızca kullandığınız kadar bilgi işlem için ödeme yapın

Verimli ölçek genişletme ile yürütücüler işleri tamamlanır yapılmaz serbest bırakılır. Artık, sonraki görevlerin ileride okuyabileceği shuffle verisini tutarak atıl durumda beklemezler.

  • Daha hızlı ölçeği küçültme. Otomatik ölçeklendirme, görev tamamlandıktan hemen sonra düğümleri kaldırır.
  • Daha az boşta işlem gücü. Yerel shuffle hizmetine hizmet etmek dışında hiçbir "zombi" executor çalışır durumda tutulmadı.
  • Disk için fazla kaynak ayırma yoktur. Büyük ölçekli karıştırma işlemleri, büyük yerel diskler gerektirmek yerine blob depolamada gerçekleştirilir.
  • Sınırlanmış depolama maliyeti. Bloklara ihtiyaç kalmadığında geri dönüş depolama alanı otomatik olarak temizlenir.

Daha dayanıklı işler

Shuffle verisi yalnızca yerel diskte saklandığında, yürütücünün çökmesi bu verinin kaybolduğu ve Spark'ın bunu yeniden hesaplaması gerektiği anlamına gelir. Verimli bir ölçek küçültme işleminde veriler ya zaten blob depolamada bulunur ya da yürütücü devreden çıkmadan önce oraya taşınır.

Scenario Etkili ölçek küçültme olmadan Verimli ölçek küçültme ile
Yürütücü çöküyor Shuffle verileri kayboldu; aşamalar yeniden yürütüldü Veriler depolama alanında güvenlidir; yeniden derleme yok
Düğüm önalımı Veriler kayboldu, pahalı yeniden denemeler Veriler hayatta kalır; iş normal şekilde devam ediyor
Sorunsuz kullanımdan çıkarma Kapatıldığında karıştırma modu devre dışı kalıyor Eş veya yedek depolamaya geçirilen bloklar
Veri getirme sırasında ağ kesintileri Basamaklı FetchFailedException Okumalar depolama alanından gelir, etkilenmez

Bu tasarım, üretimde FetchFailedException'ün en yaygın nedenini ortadan kaldırır.

Daha hızlı, gerçekten esnek ölçeklendirme

Etkili bir ölçek küçültme olmadan, otomatik ölçeklendirici, üzerindeki herhangi bir yürütücü hâlâ shuffle verileri veya önbelleğe alınmış veriler tutuyorken bir düğümü geri kazanamaz. Verimli ölçek genişletme her ikisini de birbirinden ayrıştırıyor:

  • Karıştırma verileri blob depolama alanındadır (veya kapatılırken oraya geçirilir).
  • Önbellek artık yürütücüleri sabitlemez. Delta anlık görüntü önbelleği gibi yeniden üretilebilir önbellekler ölçek genişletme korumasının dışında tutulur.

Otomatik ölçeklendirici boştaki düğümleri serbestçe kaldırabilir ve iş yükü değişikliklerine yanıt olarak kümeyi yeniden boyutlandırabilir.

Dengesiz ve büyük shuffle işlemlerinde daha iyi performans

AQE Shuffle Write, Adaptive Query Execution'ın shuffle yazımının kendisini şekillendirmesini sağlar; böylece aşağı akıştaki AQE'nin yeniden birleştirmeye gerek duymadan kullanacağı bölümleme seçilir ve uzak depolama için daha az sayıda, daha uygun boyutlu bloklar üretilir. Karar katmanıyla birleşince, büyük/eğik sorgularda daha hızlı duvar saati süresi ve küçük sorgularda ise değişmeyen gecikme elde ediyorsunuz.

Başlayın

Tam verimli ölçek küçültme yığınını etkinleştirmek için bu yapılandırmayı uygulayın:

# 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")

Kod değişikliği gerekmez. Bunları ortamınızda Spark özelliklerinde de ayarlayabilirsiniz.

Yapılandırma referansı

Uzak Karıştırma Yöneticisi (RSM)

Setting Recommended Neleri denetler?
spark.remote.shuffle.enabled true Etkin ölçeği küçültmeyi etkinleştirir. Karıştırma verileri, yürütücünün yerel diskleri yerine Azure Blob Depolama’a gider.

Karar katmanı

Setting Recommended Neleri denetler?
spark.sql.rsm.decisionlayer.enabled.level stage Karar katmanının rotaları karıştırdığı ayrıntı düzeyi. stage her Spark aşamasını bağımsız olarak değerlendirir.

AQE Karışık Yazma

Setting Recommended Neleri denetler?
spark.sql.adaptive.shuffleWrite.enabled true AQE'nin shuffle yazma aşamasına katılmasına izin verir. AQE’nin sonraki aşamalarının yeniden birleştirme yapmadan kullandığı bölümlemeyi üretir.

Uyarı

AQE'nin kendisi (spark.sql.adaptive.enabled) açık olmalıdır. Fabric Spark'ta varsayılan olarak açıktır.

Hizmet dışı bırakma sırasında yer değiştirmeli taşıma

Setting Recommended Neleri denetler?
spark.storage.decommission.shuffleBlocks.enabled true Shuffle bloklarını silmek yerine, hizmetten çıkarılmakta olan bir executor’dan başka bir yere taşır.
spark.storage.decommission.shuffleBlocks.cleanup true Başarılı bir geçişin ardından, kaynak yürütücü üzerindeki shuffle bloklarını temizler.
spark.storage.decommission.shuffleBlocks.migrateToFallbackStorage true Hiçbir eş yürütücü blokları kabul edemiyorsa, bunları yedek depolamaya (Azure Blob Depolama) taşır.
spark.storage.decommission.fallbackStorage.cleanUp true Artık gerekli olmadıklarında karıştırma bloklarını yedek depolamadan kaldırarak depolama maliyetini sınırlar.

Önbelleğe duyarlı dinamik ayırma

Setting Recommended Neleri denetler?
spark.dynamicAllocation.preventShutdownExecutorWithCache false Dinamik kaynak tahsisinin, önbelleğe alınmış blokları tutuyor olsalar bile yürütücüleri serbest bırakmasına izin verir.
spark.dynamicAllocation.excludeDeltaSnapshotCache true Bir yürütücünün hâlâ yararlı bir önbelleğe sahip olup olmadığına karar verirken Delta anlık görüntü önbelleğini göz ardı eder. Delta anlık görüntü önbelleği yeniden üretilebilir ve ölçek genişletmeyi engellememelidir.

Gelişmiş ayarlama (RSM)

Kullanıcıların çoğunun bu varsayılanları değiştirmesi gerekmez.

Yazma performansı

Setting Varsayılan Neleri denetler?
spark.remote.shuffle.partition.buffersize 16777216 (16 MB) Depolama alanına yazmadan önce bölüm başına arabelleğe alma.
spark.remote.shuffle.blocksize 8388608 (8 MB) Blob Depolama yüklenen tek tek blokların boyutu.
spark.remote.shuffle.write.maxthreads cores × 16 Karıştırma verileri yazmak için kullanılan en fazla iş parçacığı sayısı.
spark.remote.shuffle.write.maxtasks 16384 En fazla eşzamanlı yazma işlemi.

Okuma performansı

Setting Varsayılan Neleri denetler?
spark.remote.shuffle.read.parallel.enabled true Shuffle okuma işlemleri için paralel indirme akışları.
spark.remote.shuffle.read.parallelism 4 Görev başına paralel indirme akışları.
spark.remote.shuffle.read.prefetchqueuesize 250 Okuma sırasında kuyruk derinliğini önceden belirleyin.
spark.remote.shuffle.read.maxthreads cores × 4 Okuma için kullanılan maksimum iş parçacığı sayısı.

Güvenilirlik

Setting Varsayılan Neleri denetler?
spark.remote.shuffle.retries 5 Geçici depolama hatalarını yeniden deneme.
spark.remote.shuffle.retrydelayms 800 Yeniden denemeler arasındaki başlangıç bekleme süresi.
spark.remote.shuffle.retrymaxdelayms 60000 Geri çekilme üst sınırı.

Compression

Setting Varsayılan Neleri denetler?
spark.remote.shuffle.compression Kullanır spark.io.compression.codec Uzak karıştırma verileri için sıkıştırma biçimi (örneğin, lz4, zstd).

Performans sonuçları

TPC-DS kıyaslamasında, verimli ölçek küçültme etkinken ve devre dışıyken işlem maliyeti tasarruflarını gösteren, maliyetlerde yüzde 54 azalma olduğunu ortaya koyan grafik.

Hesaplama maliyetinde tasarruf (TPC-DS kıyaslaması)

Metric Etkili ölçek küçültme olmadan Verimli ölçek küçültme ile
Toplam Hesaplama (VM-Dakika) 14,952 6,880
Maliyet Azaltma 54%

İşin toplam çalışma süresi daha uzun olabilir (otomatik ölçeklendirme daha az eşzamanlı yürütücü kullanır), ancak faturalandırılan işlem gücü yarıdan fazla azaltılır.

Karar katmanı performansı (TPC-DS, RSM açık)

Küçük karıştırmaları yerel diske yönlendirmek ve sadece büyük karıştırmaları uzak depolamaya yönlendirmek, her shuffle'ı uzaktan yönlendirmeye kıyasla 57% kadar çalışma zamanı iyileştirmesi sağlar ve aynı ölçeklendirme avantajını sağlar.

Sınırlamalar

  • NEE gereklidir. Verimli ölçek genişletme, Yerel Yürütme Altyapısı'na bağlıdır.
  • Yalnızca Azure Blob Depolama. Standart BlockBlobStorage ve HNS devre dışı. Azure Data Lake 2. Nesil / HNS özellikli hesaplar uzak karıştırma deposu olarak desteklenmez.
  • Azure Özel Bağlantı desteklenmez. Özel bağlantı ağı kullanan ortamlar şu anda uyumlu değildir.
  • Karar katmanı granülerliği şu anda aşama başına uygulanmaktadır. Görev başına veya bölüm başına yönlendirme kapsam içinde değildir.
  • Önbellek davranışı değişikliği. ile preventShutdownExecutorWithCache=false, veri tutan cache()/persist() yürütücülerin ölçeği azaltılabilir. Sık erişimli veriler için yürütücüye yerel önbelleğe büyük ölçüde bağımlı olan iş yükleri doğrulama yapmalıdır.