Delta Lake'i veri dosyası boyutunu denetlemek için yapılandırma
Not
Bu makaledeki öneriler Unity Kataloğu yönetilen tabloları için geçerli değildir. Databricks, tüm yeni Delta tabloları için varsayılan ayarlarla Unity Kataloğu yönetilen tablolarının kullanılmasını önerir.
Databricks Runtime 13.3 ve üzeri sürümleri için Databricks, Delta tablo düzeni için kümeleme kullanılmasını önerir. Bkz. Delta tabloları için sıvı kümeleme kullanma.
Databricks, Delta tablolarını otomatik çalıştırmak için OPTIMIZE
ve VACUUM
üzerinde tahmine dayalı iyileştirme kullanılmasını önerir. Bkz. Unity Kataloğu yönetilen tabloları için tahmine dayalı iyileştirme.
Databricks Runtime 10.4 LTS ve sonrasında, MERGE
, UPDATE
ve DELETE
işlemleri için otomatik sıkıştırma ve optimize edilmiş yazma her zaman etkinleştirilmiştir. Bu işlevi devre dışı bırakamazsınız.
Delta Lake, yazma işlemleri ve OPTIMIZE
işlemler için hedef dosya boyutunu el ile veya otomatik olarak yapılandırma seçenekleri sağlar. Azure Databricks bu ayarların çoğunu otomatik olarak ayarlar ve dosyaları doğru boyutlandırmayı arayarak tablo performansını otomatik olarak geliştiren özellikleri etkinleştirir.
Unity Kataloğu yönetilen tablolarında, SQL ambarı veya Databricks Runtime 11.3 LTS veya üzeri kullanıyorsanız Databricks bu yapılandırmaların çoğunu otomatik olarak düzenler.
Databricks Runtime 10.4 LTS veya altında bir iş yükünü yükseltiyorsanız, bkz Arka plan otomatik sıkıştırmasına yükseltme.
Ne zaman çalıştırılır? OPTIMIZE
Otomatik sıkıştırma ve iyileştirilmiş yazma işlemleri küçük dosya sorunlarını azaltır, ancak tam olarak yerine OPTIMIZE
geçmeyebilir. Özellikle 1 TB'tan büyük tablolar için Databricks, dosyaları daha fazla birleştirmek için bir zamanlamaya göre çalışmanızı OPTIMIZE
önerir. Azure Databricks tablolar üzerinde otomatik olarak çalışmazZORDER
, bu nedenle gelişmiş veri atlama özelliğini etkinleştirmek için OPTIMIZE
ile ZORDER
birlikte çalıştırmanız gerekir. Bkz. Delta Lake için veri atlama.
Azure Databricks'te otomatik iyileştirme nedir?
Otomatik iyileştirme terimi, bazen delta.autoOptimize.autoCompact
ve delta.autoOptimize.optimizeWrite
ayarları tarafından denetlenen özelliği tanımlamak için kullanılır. Bu terim, her ayarı ayrı ayrı tanımlamak için kullanımdan kaldırılmıştır. Bkz Azure Databricks'te Delta Lake için otomatik sıkıştırma ve Azure Databricks'te Delta Lake için iyileştirilmiş yazmalar .
Azure Databricks'te Delta Lake için otomatik sıkıştırma
Otomatik sıkıştırma, küçük dosya sorunlarını otomatik olarak azaltmak için Delta tablosu bölümleri içindeki küçük dosyaları birleştirir. Otomatik sıkıştırma, bir tabloya yazmanın başarılı olmasından sonra ve yazma işlemini gerçekleştiren kümede eşzamanlı olarak çalıştırıldıktan sonra gerçekleşir. Otomatik sıkıştırma yalnızca daha önce sıkıştırılmamış dosyaları sıkıştırıyor.
Spark yapılandırmasını ayarlayarak çıkış dosyası boyutunu denetleyebilirsiniz. Databricks, iş yüküne veya tablo boyutuna göre otomatik ayarlama kullanılmasını önerir. İş yüküne göre Autotune dosya boyutunu ve tablo boyutuna göre Autotune dosya boyutunu görün.
Otomatik sıkıştırma yalnızca en az belirli sayıda küçük dosya içeren bölümler veya tablolar için tetikler. İsteğe bağlı olarak, ayarını yaparak spark.databricks.delta.autoCompact.minNumFiles
otomatik sıkıştırmayı tetiklemeniz için gereken en düşük dosya sayısını değiştirebilirsiniz.
Otomatik sıkıştırma, aşağıdaki ayarlar kullanılarak tablo veya oturum düzeyinde etkinleştirilebilir:
- Tablo özelliği:
delta.autoOptimize.autoCompact
- SparkSession ayarı:
spark.databricks.delta.autoCompact.enabled
Bu ayarlar aşağıdaki seçenekleri kabul ediyor:
Seçenekler | Davranış |
---|---|
auto (önerilir) |
Hedef dosya boyutunu diğer otomatik ayarlama işlevlerini göz önünde bulundurarak ayarlar. Databricks Runtime 10.4 LTS veya üzerini gerektirir. |
legacy |
Diğer ad için true . Databricks Runtime 10.4 LTS veya üzerini gerektirir. |
true |
Hedef dosya boyutu olarak 128 MB kullanın. Dinamik boyutlandırma yok. |
false |
Otomatik sıkıştırmayı kapatır. İş yükünde değiştirilen tüm Delta tablolarında otomatik sıkıştırmayı geçersiz kılmak için oturum düzeyinde ayarlanabilir. |
Önemli
Databricks Runtime 9.1 LTS'de, diğer yazıcılar DELETE
, MERGE
, UPDATE
veya OPTIMIZE
işlemlerini eşzamanlı olarak gerçekleştirdiğinde, otomatik sıkıştırma bu diğer işlerin bir işlem çatışmasıyla başarısız olmasına yol açabilir. Bu, Databricks Runtime 10.4 LTS ve üzeri bir sorun değildir.
Azure Databricks'te Delta Lake için iyileştirilmiş yazma işlemleri
İyileştirilmiş yazma işlemleri, veriler yazıldıkça dosya boyutunu geliştirir ve tablodaki sonraki okumalardan yararlanır.
İyileştirilmiş yazma işlemleri, bölümlenmiş tablolar için en etkili olanlardır çünkü her bölüme yazılan küçük dosyaların sayısını azaltır. Daha az büyük dosya yazmak, çok sayıda küçük dosya yazmaktan daha verimlidir, ancak veriler yazılmadan önce karıştırıldığı için yazma gecikme süresinde bir artış görebilirsiniz.
Aşağıdaki görüntüde iyileştirilmiş yazmaların nasıl çalıştığı gösterilmektedir:
Not
Yazılan dosya sayısını denetlemek için verilerinizi yazmadan hemen önce çalışan coalesce(n)
bir repartition(n)
kodunuz olabilir. İyileştirilmiş yazma işlemleri bu deseni kullanma gereksinimini ortadan kaldırır.
İyileştirilmiş yazma işlemleri Databricks Runtime 9.1 LTS ve sonraki sürümleri için varsayılan olarak etkindir:
MERGE
-
UPDATE
alt sorgularla -
DELETE
alt sorgularla
İyileştirilmiş yazma işlemleri, SQL ambarları kullanılırken CTAS
deyimler ve INSERT
işlemler için de etkinleştirilir. Databricks Runtime 13.3 LTS ve üzerinde, Unity Kataloğu'na kayıtlı tüm Delta tablolarında, bölümlenmiş tablolar için CTAS
ifadeleri ve INSERT
işlemleri için iyileştirilmiş yazımlar etkinleştirilmiştir.
İyileştirilmiş yazma işlemleri aşağıdaki ayarlar kullanılarak tablo veya oturum düzeyinde etkinleştirilebilir:
- Tablo ayarı:
delta.autoOptimize.optimizeWrite
- SparkSession ayarı:
spark.databricks.delta.optimizeWrite.enabled
Bu ayarlar aşağıdaki seçenekleri kabul ediyor:
Seçenekler | Davranış |
---|---|
true |
Hedef dosya boyutu olarak 128 MB kullanın. |
false |
Optimize edilmiş yazmaları kapatır. İş yükünde değiştirilen tüm Delta tablolarında otomatik sıkıştırmayı geçersiz kılmak için oturum düzeyinde ayarlanabilir. |
Hedef dosya boyutu ayarlama
Delta tablonuzdaki dosyaların boyutunu istediğiniz şekilde ayarlamak istiyorsanız, tablo özelliğini belirlenen boyuta ayarlayın. Bu özellik ayarlanırsa, tüm veri düzeni iyileştirme işlemleri belirtilen boyutta dosyalar oluşturmak için en iyi çabayı gösterir. İyileştirme veya Z düzeni, otomatik sıkıştırma ve iyileştirilmiş yazma işlemleri burada örnek olarak verilebilir.
Not
Unity Kataloğu yönetilen tabloları ve SQL veri ambarlarını veya Databricks Runtime 11.3 LTS ve üzerini kullanırken, yalnızca OPTIMIZE
komutları targetFileSize
ayarına saygı gösterir.
Tablo özelliği |
---|
delta.targetFileSize Tür: Bayt veya daha yüksek birim cinsinden boyut. Hedef dosya boyutu. Örneğin, 104857600 (bayt) veya 100mb .Varsayılan değer: Yok |
Mevcut tablolar için, TBL PROPERTIES
İş yüküne göre dosya boyutunu otomatik ayarla
Databricks, Databricks Runtime, Unity Kataloğu veya diğer iyileştirmeler göz önünde bulundurulmaksızın, çok sayıda MERGE
veya DML işlemi tarafından hedeflenen tüm tablolar için tablo özelliği delta.tuneFileSizesForRewrites
'ı true
olarak ayarlamayı tavsiye eder. olarak true
ayarlandığında, tablonun hedef dosya boyutu çok daha düşük bir eşiğe ayarlanır ve bu da yoğun yazma işlemlerini hızlandırır.
Açıkça ayarlanmadıysa, Azure Databricks bir Delta tablosunda önceki 10 işlemden 9'unun işlem olup MERGE
olmadığını otomatik olarak algılar ve bu tablo özelliğini olarak true
ayarlar. Bu davranışı önlemek için bu özelliği açıkça olarak false
olarak ayarlamanız gerekir.
Tablo özelliği |
---|
delta.tuneFileSizesForRewrites Tür: Boolean Veri düzeni iyileştirmesi için dosya boyutlarının ayarlanıp ayarlanmayacağı. Varsayılan değer: Yok |
Mevcut tablolar için, TBL PROPERTIES
Tablo boyutuna göre dosya boyutunu otomatik ayarla
El ile ayarlama gereksinimini en aza indirmek için Azure Databricks, Delta tablolarının dosya boyutunu tablonun boyutuna göre otomatik olarak ayarlar. Azure Databricks, tablodaki dosya sayısının fazla artmaması için daha küçük tablolar için daha küçük dosya boyutları ve daha büyük tablolar için daha büyük dosya boyutları kullanır. Azure Databricks, belirli bir hedef boyutuyla ayarlamış olduğunuz tabloları otomatik olarak ayarlamaz veya sık yeniden yazma işlemleri olan bir iş yükünü temel almaz.
Hedef dosya boyutu Delta tablosunun geçerli boyutuna bağlıdır. 2,56 TB'tan küçük tablolar için otomatik olarak seçilen hedef dosya boyutu 256 MB'tır. Boyutu 2,56 TB ile 10 TB arasında olan tablolar için hedef boyut doğrusal olarak 256 MB'tan 1 GB'a büyür. 10 TB'tan büyük tablolar için hedef dosya boyutu 1 GB'tır.
Not
Bir tablonun hedef dosya boyutu arttığında, var olan dosyalar OPTIMIZE
komutuyla daha büyük dosyalara yeniden optimize edilmez. Bu nedenle büyük bir tabloda her zaman hedef boyuttan küçük bazı dosyalar bulunabilir. Bu küçük dosyaları daha büyük dosyalara da en iyi duruma getirmek gerekiyorsa, tablo özelliğini kullanarak delta.targetFileSize
tablo için sabit bir hedef dosya boyutu yapılandırabilirsiniz.
Bir tablo artımlı olarak yazıldığında, hedef dosya boyutları ve dosya sayıları tablo boyutuna göre aşağıdaki sayılara yakın olur. Bu tablodaki dosya sayıları yalnızca bir örnektir. Gerçek sonuçlar birçok faktöre bağlı olarak farklı olacaktır.
Tablo boyutu | Hedef dosya boyutu | Tablodaki yaklaşık dosya sayısı |
---|---|---|
10 GB | 256 MB | 40 |
1 TB | 256 MB | 4096 |
2,56 TB | 256 MB | 10240 |
3 TB (Terabayt) | 307 MB | 12108 |
5 TB | 512 MB | 17339 |
7 TB (Terabayt) | 716 MB | 20784 |
10 TB | 1 GB | 24437 |
20 TB | 1 GB | 34437 |
50 TB | 1 GB | 64437 |
100 TB | 1 GB | 114437 |
Veri dosyasına yazılan satırları sınırlama
Bazen, dar veri içeren tablolar belirli bir veri dosyasındaki satır sayısının Parquet biçiminin destek sınırlarını aştığı bir hatayla karşılaşabilir. Bu hatayı önlemek için SQL oturumu yapılandırmasını spark.sql.files.maxRecordsPerFile
kullanarak Delta Lake tablosu için tek bir dosyaya yazılacak en fazla kayıt sayısını belirtebilirsiniz. Sıfır veya negatif bir değer belirtilmesi hiçbir sınırı temsil eder.
Databricks Runtime 11.3 LTS ve üzerinde, Bir Delta Lake tablosuna yazmak için DataFrame API'lerini kullanırken DataFrameWriter seçeneğini maxRecordsPerFile
de kullanabilirsiniz.
maxRecordsPerFile
belirtildiğinde, SQL oturum yapılandırması spark.sql.files.maxRecordsPerFile
değeri göz ardı edilir.
Not
Databricks, yukarıda belirtilen hatadan kaçınmak için gerekli olmadıkça bu seçeneğin kullanılmasını önermez. Bu ayar, çok dar verilere sahip bazı Unity Kataloğu yönetilen tabloları için yine de gerekli olabilir.
Arka plan otomatik sıkıştırmasına yükseltme
Databricks Runtime 11.3 LTS ve üzeri sürümlerinde, Unity Catalog tarafından yönetilen tablolar için arka planda otomatik sıkıştırma mümkündür. Eski bir iş yükünü veya tabloyu geçirirken aşağıdakileri yapın:
- Spark yapılandırmasını
spark.databricks.delta.autoCompact.enabled
kümeden veya not defteri yapılandırma ayarlarından kaldırın. - Her tablo için komutunu çalıştırarak
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)
eski otomatik sıkıştırma ayarlarını kaldırın.
Bu eski yapılandırmaları kaldırdıktan sonra, Tüm Unity Kataloğu yönetilen tabloları için arka plan otomatik sıkıştırmanın otomatik olarak tetiklenmiş olduğunu görmeniz gerekir.