Aracılığıyla paylaş


Doku Veri Mühendisliği için yerel yürütme altyapısı

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) ile uyumludur ve hem Parquet hem de Delta 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. 1 TB'lık TPC-DS karşılaştırması ile doğrulanan, geleneksel OSS (açık kaynak yazılım) Spark'a kıyasla dört kata kadar daha hızlı performans elde ederek olağanüstü bir hız geliştirmesi sunar. 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).

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.

Önemli

Yerel yürütme altyapısı, Çalışma Zamanı 1.3 (Apache Spark 3.5, Delta Lake 3.2) olan en son GA çalışma zamanı sürümünü destekler. Çalışma Zamanı 1.3'te yerel yürütme altyapısının yayımlanmasıyla birlikte, önceki sürüm olan Runtime 1.2 (Apache Spark 3.4, Delta Lake 2.4) desteği sona erer. Tüm müşterilerin en son Çalışma Zamanı 1.3 sürümüne yükseltmelerini öneririz. Çalışma Zamanı 1.2'de Yerel Yürütme Altyapısı'nı kullanıyorsanız, yerel hızlandırma devre dışı bırakılır.

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 kullanıcı arabirimine erişmek için Spark İş 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.

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ü.

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

Microsoft Fabric'teki Yerel Yürütme Altyapısı (NEE), Apache Spark işlerinin performansını önemli ölçüde artırsa da şu anda aşağıdaki sınırlamalara sahiptir:

Mevcut sınırlamalar

  • Uyumsuz Spark özellikleri: Yerel yürütme altyapısı şu anda kullanıcı tanımlı işlevleri (UDF'ler), array_contains işlevi veya yapılandırılmış akışı desteklemez. Bu işlevler veya desteklenmeyen özellikler doğrudan veya içeri aktarılan kitaplıklar aracılığıyla kullanılıyorsa Spark varsayılan altyapısına geri döner.

  • Desteklenmeyen dosya biçimleri: , JSONve XML biçimlerindeki sorgular CSVyerel yürütme altyapısı tarafından hızlandırılmaz. Bunlar varsayılan olarak yürütme için normal Spark JVM altyapısına döner.

  • ANSI modu desteklenmiyor: Yerel yürütme altyapısı ANSI SQL modunu desteklemez. Etkinleştirilirse yürütme, standart Spark motoruna geri döner.

  • Tarih filtresi türü uyuşmazlıkları: Yerel yürütme altyapısının hızlandırmasından yararlanmak için tarih karşılaştırmasının her iki tarafının da veri türünde 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

  • Ondalıktan Kayan Noktalı Sayıya Dönüştürme Uyuşmazlığı: DECIMAL'den FLOAT'e tür dönüşü yapılırken Spark, duyarlılığı korumak için veriyi önce dizeye dönüştürür ve sonra onu ayrıştırır. NEE (Velox aracılığıyla), iç int128_t gösterimden doğrudan dönüştürme işlemi gerçekleştirir, bu da yuvarlama tutarsızlıklarına neden olabilir.

  • Saat dilimi yapılandırma hataları : Spark'ta tanınmayan bir saat diliminin ayarlanması işin NEE altında başarısız olmasına neden olurken Spark JVM bunu düzgün bir şekilde işler. Örneğin:

    "spark.sql.session.timeZone": "-08:00"  // May cause failure under NEE
    
  • Tutarsız yuvarlama davranışı: round() işlevi, Spark’ın yuvarlama mantığını çoğaltmayan std::round öğesine bağlı olduğu için NEE'de farklı şekilde çalışır. Bu, yuvarlama sonuçlarında sayısal tutarsızlıklara yol açabilir.

  • Yinelenen anahtar kontrolü eksik map() işlevi: spark.sql.mapKeyDedupPolicyÖZEL DURUM olarak ayarlandığında Spark, yinelenen anahtarlar için bir hata verir. NEE şu anda bu denetimi atlar ve sorgunun yanlış başarılı olmasını sağlar.
    Örnek:

    SELECT map(1, 'a', 1, 'b'); -- Should fail, but returns {1: 'b'}
    
  • Sipariş varyansı collect_list() ile sıralama: DISTRIBUTE BY ve SORT BY kullanırken Spark'ta öğe sırasını collect_list() korur. NEE, karıştırma farklılıkları nedeniyle değerleri farklı bir sırada döndürebilir ve bu da sıralamaya duyarlı mantık için eşleşmeyen beklentilere neden olabilir.

  • collect_list() / collect_set() için ara tür uyuşmazlığı: Spark bu toplamalar için ara tür olarak BINARY kullanırken, NEE ARRAY kullanır. Bu uyuşmazlık, sorgu planlama veya yürütme sırasında uyumluluk sorunlarına yol açabilir.