Co je režim výpisu adresáře automatického zavaděče?

Auto Loader ve výchozím nastavení používá režim výpisu adresáře. V režimu výpisu adresáře automaticky zavaděč identifikuje nové soubory výpisem vstupního adresáře. Režim výpisu adresáře umožňuje rychle spustit streamy automatického zavaděče bez jakýchkoli konfigurací oprávnění, než je přístup k datům v cloudovém úložišti.

Pokud chcete dosáhnout nejlepšího výkonu v režimu výpisu adresáře, použijte Databricks Runtime 9.1 nebo vyšší. Tento článek popisuje výchozí funkce režimu výpisu adresáře a také optimalizace na základě lexikálního řazení souborů.

Jak funguje režim výpisu adresářů?

Azure Databricks má optimalizovaný režim výpisu adresářů pro automatické zavaděče pro efektivnější zjišťování souborů v cloudovém úložišti než jiné možnosti Apache Sparku.

Pokud například máte soubory nahrané každých 5 minut jako /some/path/YYYY/MM/DD/HH/fileName, aby se všechny soubory v těchto adresářích našly, obsahuje zdroj souborů Apache Spark všechny podadresáře paralelně. Následující algoritmus odhaduje celkový počet volání adresáře rozhraní API LIST do úložiště objektů:

1 (základní adresář) + 365 (za den) * 24 (za hodinu) = 8761 volání

Když obdržíte zploštěnou odpověď z úložiště, auto loader sníží počet volání rozhraní API na počet souborů v úložišti vydělený počtem výsledků vrácených jednotlivými voláními rozhraní API, což výrazně snižuje náklady na cloud. Následující tabulka uvádí počet souborů vrácených jednotlivými voláními rozhraní API pro společné úložiště objektů:

Výsledky vrácené na volání Úložiště objektů
1000 S3
5000 ADLS Gen2
1024 GCS

Přírůstkové výpisy (zastaralé)

Důležité

Tato funkce je zastaralá. Databricks místo přírůstkového výpisu doporučuje používat režim oznámení o souboru.

Poznámka:

K dispozici ve službě Databricks Runtime 9.1 LTS a novějších.

Přírůstkový výpis je k dispozici pro Azure Data Lake Storage Gen2 (abfss://), S3 (s3://) a GCS (gs://).

U lexikicky generovaných souborů využívá Auto Loader lexikální řazení souborů a optimalizované rozhraní API výpisu ke zlepšení efektivity výpisu adresáře výpisem z naposledy přijatých souborů místo výpisu obsahu celého adresáře.

Automaticky zavaděč ve výchozím nastavení zjišťuje, jestli je daný adresář použitelný pro přírůstkové výpisy, a to kontrolou a porovnáním cest k souborům s dříve dokončenými výpisy adresářů. Aby bylo možné zajistit konečnou úplnost dat v auto režimu, Automaticky zavaděč po dokončení 7 po sobě jdoucích přírůstkových seznamů automaticky aktivuje úplný seznam adresářů. Frekvenci úplných seznamů adresářů můžete řídit nastavením cloudFiles.backfillInterval pro aktivaci asynchronního obnovení v daném intervalu.

Lexikální řazení souborů

Aby se soubory daly lexicky uspořádat, musí mít nové nahrané soubory předponu, která je lexicicky větší než existující soubory. Níže jsou uvedeny některé příklady lexikálních seřazených adresářů.

Verze souborů

Delta Lake provádí zápisy do transakčních protokolů tabulek v lexikálním pořadí.

<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...

AWS DMS nahrává soubory CDC do AWS S3 způsobem s verzí.

database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...

Soubory rozdělené na oddíly data

Soubory se dají nahrát ve formátu s datem rozděleným na oddíly. Tady je několik příkladů:

// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...

// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute

Při nahrávání souborů s dělením kalendářních dat je potřeba mít na paměti některé věci:

  • Měsíce, dny, hodiny, minuty musí být ponechány vycpávky nulami, aby se zajistilo lexikální řazení (mělo by být nahrány jako hour=03, místo hour=3 nebo 2021/05/03 místo 2021/5/3).
  • Soubory nemusí být nutně nahrány v lexikálním pořadí v nejnižším adresáři, pokud zpracování probíhá méně často než časové intervaly nadřazeného adresáře.

Některé služby, které můžou nahrát soubory v dělení na datum, lexikální řazení jsou:

Změna zdrojové cesty pro automatický zavaděč

Ve verzi Databricks Runtime 11.3 LTS a vyšší můžete změnit cestu vstupu adresáře pro auto loader nakonfigurovaný pomocí režimu výpisu adresáře, aniž byste museli zvolit nový adresář kontrolního bodu.

Upozorňující

Tato funkce není podporována v režimu oznámení souborů. Pokud se použije režim oznámení souboru a cesta se změní, může se stát, že se nepodaří ingestovat soubory, které jsou již v novém adresáři v době aktualizace adresáře.

Pokud například chcete spustit úlohu denního příjmu dat, která načte všechna data z adresářové struktury uspořádané podle dne, například /YYYYMMDD/můžete pomocí stejného kontrolního bodu sledovat informace o stavu příjmu dat v jiném zdrojovém adresáři každý den a současně udržovat informace o stavu souborů přijatých ze všech dříve použitých zdrojových adresářů.