Mi az automatikus betöltő könyvtár listamódja?

Az automatikus betöltő alapértelmezés szerint címtár-listamódot használ. Címtár-lista módban az Automatikus betöltő a bemeneti könyvtár listázásával azonosítja az új fájlokat. A címtár-listázási mód lehetővé teszi az automatikus betöltő streamek gyors indítását anélkül, hogy az adatokhoz való hozzáférésen kívül más engedélykonfigurációkra is szüksége van a felhőbeli tárolóban.

A címtárlista móddal nyújtott legjobb teljesítmény érdekében használja a Databricks Runtime 9.1 vagy újabb verzióját. Ez a cikk a címtár-listázási mód alapértelmezett funkcióit, valamint a fájlok lexikális sorrendjén alapuló optimalizálást ismerteti.

Hogyan működik a címtárlista mód?

Az Azure Databricks optimalizálta a címtár-listázási módot az Automatikus betöltőhöz, hogy a felhőbeli tárolóban lévő fájlokat hatékonyabban felderítse, mint más Apache Spark-beállításokat.

Ha például 5 percenként tölt fel fájlokat, mivel /some/path/YYYY/MM/DD/HH/fileNameaz ezekben a könyvtárakban lévő összes fájl megkereséséhez az Apache Spark fájlforrás az összes alkönyvtárat párhuzamosan listázza. Az alábbi algoritmus az objektumtárolóba irányuló API-címtárhívások LIST teljes számát becsüli meg:

1 (alapkönyvtár) + 365 (naponta) * 24 (óránként) = 8761 hívás

Az automatikus betöltő az egyes API-hívások által visszaadott eredmények számával osztva csökkenti a tárolóban lévő fájlok számára irányuló API-hívások számát, ami jelentősen csökkenti a felhő költségeit. Az alábbi táblázat az egyes API-hívások által visszaadott fájlok számát mutatja a gyakori objektumtároláshoz:

Hívásonként visszaadott eredmények Objektumtár
1000 S3
5000 ADLS Gen2
1024 GCS

Növekményes listaelem (elavult)

Fontos

Ez a funkció elavult. A Databricks a növekményes listaelem helyett fájlértesítési módot javasol.

Megjegyzés:

A Databricks Runtime 9.1 LTS-ben és újabb verziókban érhető el.

Növekményes lista az Azure Data Lake Storage Gen2 (abfss://), S3 (s3://) és GCS (gs://) esetén érhető el.

A lexikálisan létrehozott fájlok esetében az Auto Loader a lexikális fájlrendezést és az optimalizált listázási API-kat használja a címtárak listájának hatékonyságának javítása érdekében, mivel a legutóbb betöltött fájlok listáját listázza ahelyett, hogy a teljes könyvtár tartalmát listázza.

Az Automatikus betöltő alapértelmezés szerint automatikusan észleli, hogy egy adott könyvtár alkalmazható-e a növekményes listázásra a korábban befejezett címtár-listaelemek fájlelérési útvonalainak ellenőrzésével és összehasonlításával. Az adatok auto végleges teljességének biztosítása módban az Automatikus betöltő automatikusan aktivál egy teljes címtárlistát 7 egymást követő növekményes lista elvégzése után. A teljes címtárlisták cloudFiles.backfillInterval gyakoriságát úgy szabályozhatja, hogy az aszinkron visszatöltéseket egy adott időközönként aktiválja.

Fájlok lexikális rendezése

Ahhoz, hogy a fájlok lexikális sorrendbe legyenek rendezve, a feltöltött új fájloknak lexikálisan nagyobb előtaggal kell rendelkezniük, mint a meglévő fájlok. Néhány példa a lexikális rendezett könyvtárakra alább látható.

Verziószámozott fájlok

A Delta Lake lexikális sorrendben véglegesíti a tábla tranzakciónaplóit.

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

Az AWS DMS verziószámozott módon tölti fel a CDC-fájlokat az AWS S3-ba.

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

Particionált fájlok dátuma

A fájlok dátumparticionált formátumban tölthetők fel. Néhány példa erre:

// <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

Ha a fájlok feltöltése dátumparticionálással történik, az alábbiakat kell szem előtt tartani:

  • A lexikális rendezés biztosításához a hónapokat, napokat, órákat, perceket nullákkal kell kipárnázni (fel kell tölteni hour=03ahelyett vagy 2021/05/03 helyett2021/5/3).hour=3
  • A fájlokat nem feltétlenül kell lexikális sorrendben feltölteni a legmélyebb könyvtárba, amíg a feldolgozás ritkábban történik, mint a szülőkönyvtár időrészletessége.

Néhány szolgáltatás, amely képes fájlokat feltölteni egy dátumparticionált lexikális sorrendben:

Az automatikus betöltő forrásútvonalának módosítása

A Databricks Runtime 11.3 LTS-ben és újabb verziókban anélkül módosíthatja az automatikus betöltő könyvtárbemeneti elérési útját, hogy új ellenőrzőpont-könyvtárat kellene választania.

Figyelmeztetés:

Ez a funkció a fájlértesítési mód esetében nem támogatott. Ha fájlértesítési módot használ, és az elérési út megváltozik, előfordulhat, hogy a címtárfrissítéskor nem tudja beszedni az új könyvtárban már meglévő fájlokat.

Ha például napi betöltési feladatot szeretne futtatni, amely egy címtárstruktúrából származó összes adatot naponta tölt be, például /YYYYMMDD/ugyanazt az ellenőrzőpontot használhatja a betöltési állapot információinak nyomon követéséhez egy másik forráskönyvtárban, miközben az összes korábban használt forráskönyvtárból betöltött fájlok állapotadatait megőrizheti.