A Delta Lake konfigurálása az adatfájl méretének szabályozásához
Feljegyzés
A cikkben szereplő javaslatok nem vonatkoznak a Unity Catalog által felügyelt táblákra. A Databricks a Unity Catalog által felügyelt táblák használatát javasolja az összes új Delta-tábla alapértelmezett beállításaival.
A Databricks Runtime 13.3 vagy újabb verzió használatakor a Databricks a fürtözés alkalmazását javasolja a Delta-tábla elrendezéséhez. Lásd: Folyékony fürtözés használata Delta-táblákhoz.
A Databricks prediktív optimalizálást javasol a Delta-táblák automatikus futtatásáhozOPTIMIZE
.VACUUM
Lásd: A Unity Catalog által felügyelt táblák prediktív optimalizálása.
A Databricks Runtime 10.4 LTS-ben és újabb verziókban az automatikus tömörítés és az optimalizált írások mindig engedélyezve vannak a MERGE
, UPDATE
és DELETE
műveletekhez. Ez a funkció nem tiltható le.
A Delta Lake lehetővé teszi a célfájl méretének manuális vagy automatikus konfigurálását írásokhoz és műveletekhez OPTIMIZE
. Az Azure Databricks számos beállítást automatikusan hangol, és a megfelelő méretű fájlok keresésével automatikusan javítja a táblázat teljesítményét.
A Unity Catalog által felügyelt táblák esetében a Databricks automatikusan hangolja a konfigurációk többségét, ha SQL Warehouse-t vagy Databricks Runtime 11.3 LTS-t vagy újabb verziót használ.
Ha a Databricks Runtime 10.4 LTS-ről vagy az alábbi verzióról frissít számítási feladatot, olvassa el a Frissítés háttérbeli automatikus tömörítésre című témakört.
Mikor kell futtatni? OPTIMIZE
Az automatikus tömörítés és az optimalizált írások csökkentik a fájlproblémákat, de nem helyettesítik teljesen a OPTIMIZE
fájlokat. Különösen az 1 TB-nál nagyobb táblák esetében a Databricks azt javasolja, hogy a fájlok további konszolidálása érdekében ütemezés szerint fusson OPTIMIZE
. Az Azure Databricks nem futtatja automatikusan a ZORDER
a táblákon, ezért a továbbfejlesztett adatátugrás engedélyezéséhez a OPTIMIZE
-t kell futtatnia a ZORDER
-val. Lásd Delta Lake adatkihagyás.
Mi az automatikus optimalizálás az Azure Databricksben?
A kifejezés automatikus optimalizálás néha a beállítások delta.autoOptimize.autoCompact
és delta.autoOptimize.optimizeWrite
által vezérelt funkcionalitást írja le. Ezt a kifejezést visszavonták az egyes beállítások külön-külön történő leírásának javára. Tekintse meg a Delta Lake automatikus tömörítését az Azure Databricksen és a Delta Lake optimalizált írásait az Azure Databricksen.
Automatikus tömörítés a Delta Lake-nek az Azure Databricksben
Az automatikus tömörítés a Delta-táblapartíciókban lévő kis fájlokat kombinálja a kis fájlproblémák automatikus csökkentése érdekében. Az automatikus tömörítés azután következik be, hogy egy táblába történő írás sikeres volt, és szinkron módon fut az írást végző fürtön. Az automatikus tömörítés csak a korábban nem tömörített fájlokat tömöríti.
A Spark-konfiguráció beállításával szabályozhatja a kimeneti fájl méretét. A Databricks az autotuning használatát javasolja a számítási feladat vagy a tábla mérete alapján. Tekintse meg az Autotune fájlméretet a számítási feladat alapján és az Autotune fájlméretet a táblázatméret alapján.
Az automatikus tömörítés csak olyan partíciók vagy táblák esetén aktiválódik, amelyek legalább bizonyos számú kis fájllal rendelkeznek. Az automatikus tömörítés aktiválásához szükséges fájlok minimális számát igény szerint módosíthatja a beállítással spark.databricks.delta.autoCompact.minNumFiles
.
Az automatikus tömörítés a táblázat vagy a munkamenet szintjén engedélyezhető az alábbi beállításokkal:
- Táblatulajdonság:
delta.autoOptimize.autoCompact
- SparkSession beállítás:
spark.databricks.delta.autoCompact.enabled
Ezek a beállítások a következő beállításokat fogadják el:
Beállítások | Működés |
---|---|
auto (ajánlott) |
Hangolja a célfájl méretét, miközben tiszteletben tartja az egyéb autotuning funkciókat. A Databricks Runtime 10.4 LTS-t vagy újabb verziót igényel. |
legacy |
Alias a következőhöz true : . A Databricks Runtime 10.4 LTS-t vagy újabb verziót igényel. |
true |
A célfájl mérete 128 MB. Nincs dinamikus méretezés. |
false |
Kikapcsolja az automatikus tömörítést. A munkamenet szintjén beállítható az automatikus tömörítés felülbírálása a számítási feladatban módosított összes Delta-tábla esetében. |
Fontos
A Databricks Runtime 9.1 LTS-ben, amikor más írók például DELETE
, MERGE
, UPDATE
, vagy OPTIMIZE
műveleteket végeznek egyszerre, az automatikus tömörítés tranzakcióütközést okozhat, ami a többi feladat sikertelenségéhez vezethet. Ez nem probléma a Databricks Runtime 10.4 LTS és újabb verziókban.
Optimalizált írási műveletek a Delta Lake számára az Azure Databricksben
Az optimalizált írások javítják a fájlméretet az adatok írása során, és kihasználják a táblázat későbbi olvasásait.
Az optimalizált írások a particionált táblák esetében a leghatékonyabbak, mivel csökkentik az egyes partíciókra írt kis fájlok számát. Kevesebb nagy fájl írása hatékonyabb, mint sok kis fájl írása, de az írási késés továbbra is nőhet, mivel az adatok össze vannak fonva a megírás előtt.
A következő képen látható az optimalizált írásmód működése:
Feljegyzés
Előfordulhat, hogy fut a kód coalesce(n)
vagy repartition(n)
, közvetlenül az adatok írása előtt, hogy szabályozza a megírt fájlok számát. Az optimalizált írások nem igénylik ezt a mintát.
Az optimalizált írások alapértelmezés szerint engedélyezve vannak a Következő műveletekhez a Databricks Runtime 9.1 LTS és újabb verziókban:
MERGE
-
UPDATE
albekérdezésekkel -
DELETE
albekérdezésekkel
Az optimalizált írások az SQL-raktárak használatakor is engedélyezve vannak az CTAS
utasításokhoz és a INSERT
műveletekhez. A Databricks Runtime 13.3 LTS-ben és újabb verziókban a Unity Katalógusban regisztrált összes Delta-tábla optimalizálta a particionált táblákra vonatkozó CTAS
utasításokhoz és INSERT
műveletekhez engedélyezett írási műveleteket.
Az optimalizált írások a táblázat vagy a munkamenet szintjén engedélyezhetők az alábbi beállításokkal:
- Táblabeállítás:
delta.autoOptimize.optimizeWrite
- SparkSession beállítás:
spark.databricks.delta.optimizeWrite.enabled
Ezek a beállítások a következő beállításokat fogadják el:
Beállítások | Működés |
---|---|
true |
A célfájl mérete 128 MB. |
false |
Az optimalizált írások kikapcsolása. A munkamenet szintjén beállítható az automatikus tömörítés felülbírálása a számítási feladatban módosított összes Delta-tábla esetében. |
Célfájl méretének beállítása
Ha a Delta-táblázatban lévő fájlok méretét szeretné finomhangolni, állítsa a táblázat tulajdonságát delta.targetFileSize
a kívánt méretre. Ha ez a tulajdonság be van állítva, minden adatelrendezési optimalizálási művelet a lehető legjobban megkísérli létrehozni a megadott méretű fájlokat. Ilyenek például az optimalizálás vagy a Z-sorrend, az automatikus tömörítés és az optimalizált írások.
Megjegyzés
A Unity Catalog által felügyelt táblák és SQL-raktárak, illetve a Databricks Runtime 11.3 LTS és újabb verziók használatakor csak OPTIMIZE
a parancsok tartják tiszteletben a targetFileSize
beállítást.
Tábla tulajdonság |
---|
delta.targetFileSize Típus: Méret bájtban vagy nagyobb egységekben. A célfájl mérete. Például 104857600 (bájt) vagy 100mb .Alapértelmezett érték: Nincs |
Meglévő táblák esetén a tulajdonságokat az SQL-parancs ALTER TABLESET TBL PROPERTIESparancsával állíthatja be és törölheti. Ezeket a tulajdonságokat automatikusan is beállíthatja, amikor új táblákat hoz létre Spark-munkamenet-konfigurációkkal. A részletekért tekintse meg a Delta-tábla tulajdonságaira vonatkozó referenciát .
A fájlméret automatikus beállítása a munkaterhelés alapján
A Databricks azt javasolja, hogy delta.tuneFileSizesForRewrites
állítsa a táblatulajdonságot true
minden olyan táblára, amelyet több MERGE
vagy DML-művelet céloz meg, függetlenül a Databricks Runtime-tól, a Unity Catalogtól vagy más optimalizálásoktól. Ha be van true
állítva, a tábla célfájlmérete sokkal alacsonyabb küszöbértékre van beállítva, ami felgyorsítja az írásigényes műveleteket.
Ha nincs explicit módon beállítva, az Azure Databricks automatikusan észleli, hogy egy Delta-táblán az előző 10 műveletből 9 művelet volt-e MERGE
művelet, és ezt a táblatulajdonságot a következőre true
állítja. A viselkedés elkerülése érdekében false
explicit módon kell beállítania ezt a tulajdonságot.
Tábla tulajdonságai |
---|
delta.hangolja a fájlméreteket az átírásokhoz Típus: Boolean A fájlméretek finomhangolása az adatelrendezés optimalizálásához. Alapértelmezett érték: Nincs |
Meglévő táblák esetén a tulajdonságokat az SQL-parancs ALTER TABLESET TBL PROPERTIESparancsával állíthatja be és törölheti. Ezeket a tulajdonságokat automatikusan is beállíthatja, amikor új táblákat hoz létre Spark-munkamenet-konfigurációkkal. A részletekért tekintse meg a Delta-tábla tulajdonságaira vonatkozó referenciát .
Hangolja be a fájlméretet a tábla mérete alapján
A manuális finomhangolás szükségességének minimalizálása érdekében az Azure Databricks automatikusan behangolja a Delta-táblák fájlméretét a tábla mérete alapján. Az Azure Databricks kisebb fájlméreteket fog használni a kisebb táblákhoz, és nagyobb méretű fájlméreteket a nagyobb táblákhoz, hogy a táblázatban lévő fájlok száma ne nőjön túl nagyra. Az Azure Databricks nem hangolja automatizáltan azokat a táblákat, amelyeket adott célméret szerint vagy gyakori átírásokkal rendelkező feladat alapján hangolt.
A célfájl mérete a Delta-tábla aktuális méretén alapul. 2,56 TB-nál kisebb táblák esetén az automatikusan létrehozott célfájl mérete 256 MB. A 2,56 TB és 10 TB közötti méretű táblák esetében a célméret lineárisan, 256 MB-ról 1 GB-ra nő. 10 TB-nál nagyobb táblák esetén a célfájl mérete 1 GB.
Feljegyzés
Amikor egy tábla célfájlmérete növekszik, a parancs nem optimalizálja újra a OPTIMIZE
meglévő fájlokat nagyobb fájlokra. A nagy táblák ezért mindig tartalmazhatnak olyan fájlokat, amelyek kisebbek a célméretnél. Ha ezeket a kisebb fájlokat is nagyobb fájlokra kell optimalizálni, akkor a tábla tulajdonságával konfigurálhat rögzített célfájlméretet a delta.targetFileSize
táblához.
Ha egy táblázatot növekményesen ír, a célfájlméretek és -fájlok száma a táblázat méretétől függően közel lesz a következő számokhoz. A táblázatban szereplő fájlszám csak példa. A tényleges eredmények számos tényezőtől függően eltérőek lesznek.
Tábla mérete | Célfájl mérete | A táblázatban lévő fájlok hozzávetőleges száma |
---|---|---|
10 GB | 256 MB | 40 |
1 TB | 256 MB | 4096 |
2,56 TB | 256 MB | 10240 |
3 TB | 307 MB | 12108 |
5 TB | 512 MB | 17339 |
7 TB | 716 MB | 20784 |
10 TB | 1 GB | 24437 |
20 TB | 1 GB | 34437 |
50 TB | 1 GB | 64437 |
100 TB | 1 GB | 114437 |
Adatfájlban írt sorok korlátozása
Időnként előfordulhat, hogy a szűk adatokat tartalmazó táblák olyan hibát tapasztalnak, amely miatt egy adott adatfájl sorainak száma meghaladja a Parquet formátum támogatási korlátait. A hiba elkerülése érdekében az SQL-munkamenet konfigurációjának spark.sql.files.maxRecordsPerFile
használatával megadhatja, hogy egy Delta Lake-tábla egyetlen fájljába legfeljebb hány rekordot írjon. Nulla vagy negatív érték megadása nem jelent korlátot.
A Databricks Runtime 11.3 LTS-ben és újabb verziókban a DataFrameWriter lehetőséget maxRecordsPerFile
is használhatja a DataFrame API-k használatával egy Delta Lake-táblába való íráshoz. Ha maxRecordsPerFile
meg van adva, a rendszer figyelmen kívül hagyja az SQL-munkamenet-konfiguráció spark.sql.files.maxRecordsPerFile
értékét.
Feljegyzés
A Databricks csak akkor javasolja ezt a lehetőséget, ha a fent említett hiba elkerülése érdekében szükséges. Ez a beállítás továbbra is szükséges lehet néhány Unity Catalog által felügyelt, nagyon szűk adattal rendelkező táblához.
Frissítés a háttér automatikus tömörítésére
A háttér automatikus tömörítése a Unity Catalog által felügyelt táblákhoz érhető el a Databricks Runtime 11.3 LTS és újabb verziókban. Örökölt számítási feladat vagy tábla áttelepítésekor tegye a következőket:
- Távolítsa el a Spark-konfigurációt
spark.databricks.delta.autoCompact.enabled
a fürt vagy a jegyzetfüzet konfigurációs beállításai közül. - Az egyes táblák esetében futtassa a
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)
parancsot a bármilyen örökölt automatikus tömörítési beállítások eltávolítására.
Az örökölt konfigurációk eltávolítása után látnia kell, hogy a háttér automatikus tömörítése automatikusan aktiválódik az összes Unity Catalog által felügyelt táblához.