Fabric Veri Mühendisliği için yerel yürütme motoru

Yerel yürütme altyapısı, Microsoft Fabric'teki Apache Spark iş yürütmeleri için çığır açan bir geliştirmedir. Bu vektörleştirilmiş altyapı, Spark sorgularınızı doğrudan göl evi altyapınızda çalıştırarak performansı ve verimliliğini iyileştirir. Motorun sorunsuz entegrasyonu, kod değişikliği gerektirmemesi ve bir satıcıya bağımlı kalmayı önlemesi anlamına gelir. Apache Spark API'lerini destekler ve Çalışma Zamanı 1.3 (Apache Spark 3.5) ve Çalışma Zamanı 2.0 (Apache Spark 4.1) ile uyumludur ve Parquet, Delta ve CSV biçimleriyle çalışır. Verilerinizin OneLake içindeki konumu ne olursa olsun veya verilere kısayollar aracılığıyla erişiyorsanız, yerel yürütme altyapısı verimliliği ve performansı en üst düzeye çıkarır.

Yerel yürütme altyapısı, operasyonel maliyetleri en aza indirirken sorgu performansını önemli ölçüde artırır. Gerçek sonuçlar iş yükü özelliklerine ve yapılandırmasına göre değişir. Altyapı, rutin veri alımı, toplu işler ve ETL (ayıklama, dönüştürme, yükleme) görevlerinden karmaşık veri bilimi analizine ve duyarlı etkileşimli sorgulara kadar çok çeşitli veri işleme senaryolarını yönetme konusunda ustadır. Kullanıcılar hızlandırılmış işleme sürelerinden, daha yüksek aktarım hızından ve iyileştirilmiş kaynak kullanımından yararlanır.

Yerel Yürütme Altyapısı iki önemli işletim sistemi bileşenini temel alır: Meta tarafından sunulan bir C++ veritabanı hızlandırma kitaplığı olan Velox ve JVM tabanlı SQL altyapılarının yürütmesini Intel tarafından sunulan yerel altyapılara boşaltmaktan sorumlu bir orta katman olan Apache Glüten (inkübating).

Desteklenen işleçler JVM tabanlı Spark'tan vektörleştirilmiş bir C++ yürütme yoluna yüklenerek Parquet ve Delta biçimleri için yerel destekle sütunlu, SIMD hızlandırmalı işleme sağlanır. Yerel altyapı, uyarlamalı sorgu yürütme (AQE), maliyet tabanlı yeniden yazma işlemleri, sütun ayıklama ve koşul gönderme dahil olmak üzere önemli Doku Spark sorgu iyileştirmelerini korur, böylece işleçler boşaltıldığında bu iyileştirici davranışları tamamen etkin kalır. Altyapı ayrıca paralel Delta anlık görüntüsü yüklemeyi destekler ve Delta tablolarında Z sıralama ve Sıvı Kümeleme'den yararlanan işlemleri hızlandırarak düzenli veri düzenleri için daha fazla performans kazancı sağlar.

Yerel yürütme motoru ne zaman kullanılmalı?

Yerel yürütme altyapısı, büyük ölçekli veri kümelerinde sorgu çalıştırmak için bir çözüm sunar; temel alınan veri kaynaklarının yerel özelliklerini kullanarak ve genellikle geleneksel Spark ortamlarında veri taşıma ve serileştirme ile ilişkili ek yükü en aza indirerek performansı iyileştirir. Motor, rollup hash toplama, yayın iç içe döngü birleştirmesi (BNLJ) ve hassas zaman damgası biçimleri dahil olmak üzere çeşitli işleçleri ve veri türlerini destekler. Ancak, motorun özelliklerinden tam olarak yararlanmak için en uygun kullanım örneklerini göz önünde bulundurmanız gerekir:

  • Motor, Parquet ve Delta biçimlerindeki verilerle çalışırken etkilidir; bu verileri yerel ve verimli bir şekilde işleyebilir.
  • Karmaşık dönüştürmeler ve toplamalar içeren sorgular, altyapının sütunlu işleme ve vektörleştirme özelliklerinden önemli ölçüde yararlanır.
  • Performans geliştirmesi, sorguların desteklenmeyen özelliklerden veya ifadelerden kaçınarak geri dönüş mekanizmasını tetiklemediği senaryolarda en dikkat çekicidir.
  • Motor, basit veya G/Ç bağlı olmayan, hesaplama açısından yoğun sorgular için uygundur.

Yerel yürütme altyapısı tarafından desteklenen işleçler ve işlevler hakkında bilgi için Apache Gluten belgelerine bakın.

Yerel yürütme motorunu etkinleştir

Önizleme aşamasında yerel yürütme altyapısının tüm özelliklerini kullanmak için belirli yapılandırmalar gereklidir. Aşağıdaki yordamlarda not defterleri, Spark iş tanımları ve tüm ortamlar için bu özelliğin nasıl etkinleştirileceği gösterilmektedir.

Ortam düzeyinde etkinleştirme

Tekdüzen performans geliştirmesi sağlamak için ortamınızla ilişkili tüm işlerde ve not defterlerinde yerel yürütme altyapısını etkinleştirin:

  1. Ortamınızı içeren çalışma alanına gidin ve ortamı seçin. Eğer bir ortam oluşturmadıysanız, Fabric'de ortam oluşturma, yapılandırma ve kullanma bölümüne bakın.

  2. Spark işlem altında Hızlandırma'ya tıklayın.

  3. Yerel yürütme motorunu etkinleştir etiketli kutuyu işaretleyin.

  4. Değişiklikleri kaydedin ve yayımlayın .

    Ortam öğesi içinde yerel yürütme altyapısının nasıl etkinleştirileceği gösteren ekran görüntüsü.

Ortam düzeyinde etkinleştirildiğinde, sonraki tüm işler ve not defterleri ayarı devralır. Bu devralma, ortamda oluşturulan tüm yeni oturumların veya kaynakların gelişmiş yürütme özelliklerinden otomatik olarak yararlanmasını sağlar.

Önemli

Daha önce yerel yürütme altyapısı, ortam yapılandırmasındaki Spark ayarları aracılığıyla etkinleştirildi. Yerel yürütme altyapısı artık ortam ayarlarının Hızlandırma sekmesindeki bir geçiş tuşu kullanılarak daha kolay etkinleştirilebilir. Kullanmaya devam etmek için Hızlandırma sekmesine gidin ve anahtarı açın. İsterseniz Spark özellikleri aracılığıyla da etkinleştirebilirsiniz.

Not defteri veya Spark iş tanımı için etkinleştirme

Yerel yürütme altyapısını tek bir not defteri veya Spark iş tanımı için de etkinleştirebilirsiniz; yürütme betiğinizin başında gerekli yapılandırmaları dahil etmeniz gerekir:

%%configure 
{ 
   "conf": {
       "spark.native.enabled": "true", 
   } 
} 

Not defterleri için gerekli yapılandırma komutlarını ilk hücreye ekleyin. Spark iş tanımları için, Spark iş tanımınızın ön cephesine yapılandırmaları ekleyin. Yerel Yürütme Altyapısı canlı havuzlarla tümleşiktir, bu nedenle özelliği etkinleştirdikten sonra yeni bir oturum başlatmanıza gerek kalmadan hemen geçerlilik kazanır.

Sorgu düzeyinde denetim

Yerel Yürütme Altyapısı'nı kiracı, çalışma alanı ve ortam düzeylerinde etkinleştirme mekanizmaları, kullanıcı arabirimiyle sorunsuz bir şekilde tümleştirilmiştir ve etkin geliştirme aşamasındadır. Bu arada, özellikle şu anda desteklenmeyen işleçler içeriyorsa belirli sorgular için yerel yürütme altyapısını devre dışı bırakabilirsiniz (bkz . sınırlamalar). Devre dışı bırakmak için spark.native.enabled Spark yapılandırmasını sorgunuzu içeren belirli bir hücre için false olarak ayarlayın.

%%sql 
SET spark.native.enabled=FALSE; 

Not defteri içindeki yerel yürütme altyapısını devre dışı bırakma işlemini gösteren ekran görüntüsü.

Yerel yürütme altyapısının devre dışı bırakıldığı sorguyu yürütürken spark.native.enabled değerini true olarak ayarlayarak sonraki hücreler için yeniden etkinleştirmeniz gerekir. Spark kod hücrelerini sırayla yürüttüğü için bu adım gereklidir.

%%sql 
SET spark.native.enabled=TRUE; 

Motor tarafından yürütülen işlemleri tanımlama

Apache Spark işinizdeki bir işlecin yerel yürütme altyapısı kullanılarak işlenip işlenmediğini belirlemek için çeşitli yöntemler vardır.

Spark kullanıcı arabirimi ve Spark geçmiş sunucusu

İncelemeniz gereken sorguyu bulmak için Spark kullanıcı arabirimine veya Spark geçmiş sunucusuna erişin. Spark web arayüzüne erişmek için Spark iş tanımınıza gidin ve çalıştırın. Çalıştırmalar sekmesinde, Uygulama adı yanındaki ... seçin ve ardından Spark web kullanıcı arabirimini Açseçin. Spark kullanıcı arabirimine çalışma alanının İzleyici sekmesinden de erişebilirsiniz. İzleme sayfasından not defterini veya işlem hattını seçin, etkin işler için doğrudan bir Spark UI bağlantısı mevcuttur.

spark web kullanıcı arabirimine nasıl gidilir gösteren ekran görüntüsü .

Spark UI arabiriminde görüntülenen sorgu planında, Transformer, *NativeFileScan veya VeloxColumnarToRowExecsonekiyle biten düğüm adlarını arayın. Sonek, yerel yürütme altyapısının işlemi yürüttüğüne işaret eder. Örneğin, düğümler RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer veya BroadcastNestedLoopJoinExecTransformer olarak etiketlenebilir. CSV veri kaynakları için yerel taramalar, Parquet ve Delta tarama düğümlerine benzer şekilde Spark kullanıcı arabiriminde yerel dosya taraması veya transformatör düğümleri olarak görünebilir.

Transformer sonekiyle biten DAG görselleştirmesini kontrol etme yöntemini gösteren ekran görüntüsü.

DataFrame açıklaması

Alternatif olarak, yürütme planını görüntülemek için komutunu not defterinizde yürütebilirsiniz df.explain() . Çıktıda, aynı Transformer, *NativeFileScan veya VeloxColumnarToRowExec soneklerini arayın. Bu yöntem, belirli işlemlerin yerel yürütme altyapısı tarafından işlenip işlenmediğini onaylamak için hızlı bir yol sağlar.

Sorgunuzun fiziksel planını denetlemeyi ve sorgunun yerel yürütme altyapısı tarafından yürütüldüğünü görme işlemini gösteren ekran görüntüsü.

Fabric Spark Danışmanı uyarıları

Fabric Spark Danışmanı, not defteri hücresinin yürütülmesi sırasında gerçek zamanlı yedekleme görünürlüğü sağlar. İşleç veya plan kesimi yerel yol yerine JVM tabanlı Spark'a geri döndüğünde Danışman, not defterinden çıkmadan desteklenmeyen işleçleri veya yapılandırmaları hızla belirlemenize yardımcı olan bir uyarıyı doğrudan not defteri hücre çıkışına gösterir. Yerel boşaltmanın ne zaman uygulanmadığını tanılamak ve sorgunuzu veya yapılandırmanızı ayarlayıp ayarlamamaya karar vermek için bu uyarıları kullanabilirsiniz.

Geri dönüş mekanizması

Bazı durumlarda, desteklenmeyen özellikler gibi nedenlerle yerel yürütme altyapısı sorgu yürütemeyebilir. Bu gibi durumlarda, geleneksel Spark motoruna dönülür. Bu otomatik geri dönüş mekanizması, iş akışınızda kesinti olmamasını sağlar.

Geri dönüş mekanizmasını gösteren ekran görüntüsü.

Geri dönüş mekanizmasıyla ilişkili günlüklerin nasıl denetleneceğini gösteren ekran görüntüsü.

Motor tarafından yürütülen sorguları ve DataFrame'leri izleme

Yerel Yürütme altyapısının SQL sorgularına ve DataFrame işlemlerine nasıl uygulandığını daha iyi anlamak ve aşama ve işleç düzeylerinde detaya gitmek için, yerel altyapı yürütmesi hakkında daha ayrıntılı bilgi için Spark kullanıcı arabirimine ve Spark Geçmiş Sunucusu'na başvurabilirsiniz.

Yerel Yürütme Altyapısı Sekmesi

Glüten derleme bilgilerini ve sorgu yürütme ayrıntılarını görüntülemek için yeni 'Gluten SQL / DataFrame' sekmesine gidebilirsiniz. Sorgular tablosu, her sorgu için Yerel motor üzerinde çalışan düğüm sayısı ve JVM'ye geri dönen düğümler hakkında içgörüler sağlar.

Yerel yürütme altyapısı sekmesini gösteren ekran görüntüsü.

Sorgu Yürütme Grafı

Apache Spark sorgu yürütme planı görselleştirmesi için sorgu açıklamasında da seçim yapabilirsiniz. Yürütme grafı, aşamalar ve bunların ilgili işlemleri arasında doğal yürütme ayrıntılarını sağlar. Arka plan renkleri yürütme altyapılarını ayırt eder: yeşil, Yerel Yürütme Altyapısı'nı temsil ederken açık mavi, işlemin varsayılan JVM Altyapısı'nda çalıştığını gösterir.

Sorgu yürütme grafiğini gösteren ekran görüntüsü.

Sınırlamalar

Fabric'teki yerel yürütme motoru (NEE) Apache Spark işleri için performansı önemli ölçüde artırsa da, şu anda aşağıdaki sınırlamalara sahiptir. Runtime 1.3'e uygulanan birkaç doğrulukla ilgili madde (Apache Spark 3.5)Runtime 2.0'da (Apache Spark 4.1) çözülür; Her öğe uygulandığı çalışma süresini belirtir.

Mevcut sınırlamalar

  • Uyumsuz Spark özellikleri (tüm çalışma zamanları): Yerel yürütme motoru şu anda yapılandırılmış akışı desteklemiyor. Desteklenmeyen özellikleri doğrudan veya içe aktarılmış kütüphaneler üzerinden kullanırsanız, Spark varsayılan motoruna geri döner. Yerel yürütme motoru artık Python UDF'leri, Scala UDF'leri ve karmaşık veri türlerini (diziler, haritalar, yapılar) destekliyor. Daha fazla bilgi için yerel yürütme altyapısında Python UDF'leri, Scala UDF'leri ve karmaşık veri türleri bölümüne bakın.

  • Desteklenmeyen dosya formatları (tüm çalışma zamanları): Yerel yürütme motoru, sorguları JSON hızlandırmaz.XML Bu formatlar çalıştırma için varsayılan olarak normal Spark JVM motoruna geri dönüyor. Vektörize CSV ayrıştırıcı artık CSV'yi destekliyor.

  • ANSI modu (Sadece Runtime 1.3): Runtime 1.3'te (Apache Spark 3.5), yerel yürütme motoru ANSI SQL modunu desteklemiyor. ANSI SQL modunu etkinleştirirseniz, çalıştırma orijinal Spark motoruna geri döner. Runtime 2.0'da (Apache Spark 4.1) ANSI SQL modu desteklenir: operatörler yerel motora aktarır ve ANSI hata semantiği (örneğin, sıfıra bölme ve geçersiz yayınlar) JVM Spark ile tutarlı şekilde uygulanır.

  • Tarih filtresi tipi uyumsuzluğu (tüm çalışma zamanları): Yerel yürütme motorunun hızlandırmasından faydalanmak için, tarih karşılaştırmasının her iki tarafının veri tipinde eşleştiğinden emin olun. Örneğin, bir DATETIME sütunu bir dize değişmez değeriyle karşılaştırmak yerine, açıkça gösterildiği gibi dönüştürün:

    CAST(order_date AS DATE) = '2024-05-20'
    

Diğer önemli noktalar ve sınırlamalar

Note

Bu bölümdeki ondalık döküm, zaman dimi, round()map() tekrarlayıcı anahtar ve collect_list()collect_set()/öğeler Runtime 1.3 (Apache Spark 3.5) için geçerlidir ve Runtime 2.0'da (Apache Spark 4.1) çözülür. Runtime 1.3'te hâlâ çalışan kullanıcılar için korunuyor.

  • Decimal to Float atış uyumsuzluğu (Çalışma Süresi 1.3; Runtime 2.0'da çözüldü): Spark bir diziye DECIMALFLOATdönüştürerek ve onu ayrıştırarak hassasiyeti korur. Çalışma zamanı 1.3'te, NEE (Velox aracılığıyla) iç int128_t temsilden doğrudan bir cast yapar ve bu da yuvarlama tutarsızlıklarına yol açabilir.

  • Zaman dizimi yapılandırma hataları (Çalışma zamanı 1.3; Runtime 2.0'da çözüldü): Çalışma zamanı 1.3'te, Spark'ta tanınmayan bir zaman dilimi ayarlandığında NEE altında iş başarısız olurken, Spark JVM bunu zarifçe yönetir. Örneğin:

    "spark.sql.session.timeZone": "-08:00"  // May cause failure under NEE on Runtime 1.3
    
  • Tutarsız yuvarlama davranışı (Runtime 1.3; Runtime 2.0'da çözüldü): Runtime 1.3'te, round() fonksiyon NEE'de farklı davranır çünkü 'ye std::roundbağımlı olur ve bu da Spark'ın yuvarlatma mantığını kopyalamaz. Bu fark, yuvarlama sonuçlarında sayısal tutarsızlıklara yol açabilir.

  • Eksik tekrarlanan anahtar kontrolü map() fonksiyonu (Çalışma Zamanı 1.3; Çalışma Zamanı 2.0'da çözüldü): spark.sql.mapKeyDedupPolicyEXCEPTION olarak ayarlandığında, Spark tekrarlanan anahtarlar için bir hata atar. Runtime 1.3'te NEE bu kontrolü atlar ve sorgu yanlış başarılı olur. Runtime 2.0'da, NEE JVM Spark ile tutarlı şekilde artış yapıyor DUPLICATED_MAP_KEY .
    Örnek:

    SELECT map(1, 'a', 1, 'b'); -- Should fail with duplicate keys
    
  • Sıralama ile sıralanma varyansı collect_list() (Çalışma Zamanı 1.3; Çalışma Zamanı 2.0'da çözüldü): DISTRIBUTE BY ve SORT BYkullanıldığında, Kıvılcım öğe sırasını korurcollect_list(). Runtime 1.3'te, NEE karışık farklılıklar nedeniyle değerleri farklı bir sırayla döndürebilir; bu da sıralamaya duyarlı mantık için beklentilerin uyumsuz olmasına yol açabilir.

  • Ara tip uyumsuzluğu için collect_list() / collect_set() (Çalışma Zamanı 1.3; Runtime 2.0'da çözüldü): Runtime 1.3'te, Spark BINARY bu toplamalar için ara tip olarak kullanırken, NEE ARRAY. Bu uyuşmazlık, sorgu planlama veya yürütme sırasında uyumluluk sorunlarına yol açabilir.

  • Depolama erişimi için gerekli yönetilen özel uç noktalar (tüm çalışma zamanları): Native Execution Engine (NEE) etkinleştirildiğinde ve spark işleri yönetilen özel uç nokta kullanarak bir depolama hesabına erişmeye çalışıyorsa, Blob (blob.core.windows.net) ve DFS / Dosya Sistemi (dfs.core.windows.net) uç noktaları için ayrı yönetilen özel uç noktaları yapılandırmanız gerekir, hatta aynı depolama hesabına işaret etseler bile. Her ikisi için de tek bir uç noktayı tekrar kullanamazsınız. Bu sınırlama, özel uç noktalarını depolama hesaplarına yöneten bir çalışma alanında yerel yürütme motorunu etkinleştirirken ek ağ yapılandırması gerektirebilir.