Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Databricks üzerinde üretim ortamındaki Structured Streaming iş yüklerini zamanlanmış Lakeflow Jobs olarak çalıştırın. Bakınız Lakeflow İşleri.
Databricks her zaman aşağıdakileri yapılandırmanızı önerir:
-
displayvecountgibi sonuçları döndürebilecek gereksiz kodu not defterlerinden kaldırın. - Structured Streaming iş yüklerini genel amaçlı işlem kaynakları üzerinde çalıştırmayın. Akışları her zaman iş işlemeyi kullanarak Lakeflow Jobs olarak planlayın.
- Lakeflow İşlerini
Continuousmodunu kullanarak zamanlayın. Azure Databricks İşleri zamanlama özelliğini, Yapılandırılmış Akış trigger interval'ından ayıran budur. - Yapılandırılmış Akış işleri için işlem için otomatik ölçeklendirmeyi etkinleştirmeyin.
Bazı iş yükleri aşağıdakilerden yararlanıyor:
Azure Databricks - Durum bilgisi olan sorgular için zaman uyumsuz durum denetim noktası oluşturma
- Zaman uyumsuz ilerleme izleme
Databricks, Yapılandırılmış Akış iş yükleri için üretim altyapısını yönetme karmaşıklıklarını azaltmak için Lakeflow işlem hatlarını kullanıma sunar. Databricks, yeni Yapılandırılmış Akış işlem hatları için Lakeflow işlem hatlarının kullanılmasını önerir. Bkz. Spark Bildirimsel İşlem Hatları.
Not
İşlem otomatik ölçeklendirmesi, Yapılandırılmış Akış iş yükleri için küme boyutunu azaltmayla ilgili sınırlamalara sahiptir. Databricks, akış iş yükleri için geliştirilmiş otomatik ölçeklendirme ile Lakeflow üzerinde Spark Bildirimli İşlem Hatlarının kullanılmasını önerir. Bkz. Otomatik ölçeklendirme ile Lakeflow işlem hattı kümesi kullanımını iyileştirme.
:::note Sunucusuz işlem
Sunucusuz işlemde yalnızca Trigger.AvailableNow() ve Trigger.Once() desteklenir. Databricks Trigger.AvailableNow() öneriyor.
Sunucusuz işlemde sürekli akış için, sürekli modda Tetiklenen ile sürekli işlem hattı modu karşılaştırmasını kullanın.
Bkz . Akış sınırlamaları.
:::
Akış iş yüklerini hata bekleyebileceğiniz şekilde tasarlama
Databricks, akış işlerini her zaman hata durumunda otomatik olarak yeniden başlatacak şekilde yapılandırmanızı önerir. Şema evrimi de dahil olmak üzere bazı özellikler, Yapılandırılmış Akış iş yüklerinin otomatik olarak yeniden denemesini gerektirir. Hata durumunda akış sorgularını yeniden başlatmak için bkz. Yapılandırılmış Akış işlerini yapılandırma.
Bazı işlemler foreachBatch gibi, tam olarak bir kez yerine en az bir kez garanti verir. Bu işlemler için işlem hattınızın idempotent olduğundan emin olun. Bkz. Rastgele veri havuzlarına yazmak için foreachBatch kullanma.
Not
Bir sorgu yeniden başlatıldığında, önceki çalıştırma sırasında planlanan mikro toplu işlem gerçekleştirilir. İşiniz bellek yetersiz hatası nedeniyle başarısız olduysa veya büyük boyutlu bir mikro toplu işlem nedeniyle işi el ile iptal ettiyseniz, mikro toplu işlemi başarıyla işlemek için işlemin ölçeğini artırmanız gerekebilir.
Çalıştırmalar arasındaki yapılandırmaları değiştirirseniz, bu yapılandırmalar planlanan ilk yeni toplu işleme uygulanır. Bkz. Yapılandırılmış Akış sorgusunda değişikliklerden sonra kurtarma işlemini.
Bir görev yeniden denendiğinde
bir Azure Databricks işinin parçası olarak birden çok görev zamanlayabilirsiniz. Sürekli tetikleyiciyi kullanarak bir işi yapılandırdığınızda, görevler arasında bağımlılık ayarlayamazsınız.
Aşağıdaki yaklaşımlardan birini kullanarak tek bir işte çok sayıda akışı zamanlamayı tercih edebilirsiniz:
- Birden çok görev: Sürekli tetikleyiciyi kullanarak akış iş yüklerini çalıştıran birden çok görev içeren bir iş tanımlayın.
- Birden çok sorgu: Tek bir görev için kaynak kodunda birden çok akış sorgusu tanımlayın.
Ayrıca bu stratejileri birleştirebilirsiniz. Aşağıdaki tablo bu yaklaşımları karşılaştırır.
| Strateji | Birden çok görev | Birden çok sorgu |
|---|---|---|
| Hesaplama kaynakları nasıl paylaşılır? | Databricks, her bir akış görevine uygun şekilde boyutlandırılmış işleri dağıtmanızı önerir. İsteğe bağlı olarak görevler arasında işlem gücü paylaşımı yapabilirsiniz. | Tüm sorgular aynı hesaplamayı paylaşır. İsteğe bağlı olarak zamanlayıcı havuzlarına sorgu atayabilirsiniz. |
| Yeniden denemeler nasıl yönetilir? | İş yeniden denenmeden önce tüm görevlerin başarısız olması gerekir. | Herhangi bir sorgu başarısız olursa görev yeniden denenir. |
Birden çok görev veya sorguyla çalışma hakkında daha fazla ayrıntı için bkz. Aynı kümede birden çok Yapılandırılmış Akış sorgusu çalıştırma.
Hata durumunda akış sorgularını yeniden başlatmak için Yapılandırılmış Akış işlerini yapılandırma
Databricks, sürekli tetikleyiciyi kullanarak tüm akış iş yüklerini yapılandırmanızı önerir. Bkz İşleri sürekli çalıştırma.
Sürekli tetikleyici varsayılan olarak aşağıdaki davranışa sahiptir:
- İşin birden fazla eşzamanlı çalışmasını önler.
- Önceki çalıştırma başarısız olduğunda yeni bir çalıştırma başlatır.
- Yeniden denemeler için üstel geri çekilme stratejisi kullanır.
Databricks, iş akışlarını zamanlarken her zaman çok amaçlı işlem yerine iş hesaplama kaynaklarının kullanılmasını önerir. İş hatası ve yeniden deneme sırasında yeni işlem kaynakları dağıtılır.
Not
Databricks, streamingQuery.awaitTermination() veya spark.streams.awaitAnyTermination() kullanmamanızı önerir. Bkz . Ne zaman kullanılır awaitTermination()?
Ne zaman kullanılır? awaitTermination()
streamingQuery.awaitTermination() ve spark.streams.awaitAnyTermination() mevcut iş parçacığını, akış sorgusu sonlandığında kadar bloklar. Bu işlevlerin kullanılıp kullanılmaymayacağı, yürütme ortamınıza bağlıdır.
Lakeflow Jobs için streamingQuery.awaitTermination() veya spark.streams.awaitAnyTermination() kullanmayın. İşler hizmeti bir akış sorgusu etkin olduğunda bir çalıştırmanın tamamlanmasını otomatik olarak engellediğinden bu işlevler gerekli değildir. Her iki işlev de not defteri hücrelerinin tamamlanmasını engeller ve Görevler servisinin canlı veri sorgusunu izlemesine mani olur, bu da kapsam ölçümlerini ve iş bildirimlerini kesintiye uğratır.
Aşağıdaki durumlarda kullanın awaitTermination() :
| Kullanım örneği | Davranış |
|---|---|
| Tüm amaçlı hesaplamada etkileşimli not defterleri |
awaitTermination() hücreyi çalışır durumda tutar, sorgu durumunu gözlemlemenizi sağlar ve not defteri çıkışında hataların ortaya çıkarılmasını sağlar. |
| Yerel ve geliştirme ortamları | Spark programını yerel olarak çalıştırırken, ana iş parçacığı tamamlandığında işlemden çıkılır. Akış sorgusu bitene veya başarısız olana kadar programı canlı tutmak için çağırın awaitTermination() . |
| Hatanın sürücüye iletilmesi |
awaitTermination() olmadan, iş bağlamı olmayan bir akış sorgusu hatası, çağıran iş parçacığına aktarılamayabilir. Sorgu sessizce başarısız olabilir ve hataların algılanıp tanılanabilmesini zorlaştırır.
awaitTermination() çağrısı, sürücüde sorgu istisnasını yeniden oluşturur. |