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/fileName
az 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ó már elavult. A Databricks a fájlértesítési mód használatát ajánlja a növekményes listázás helyett.
Feljegyzé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=03
ahelyett vagy2021/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 Azure Data Factory konfigurálható úgy, hogy lexikális sorrendben töltsön fel fájlokat. Itt talál egy példát.
- Kinesis Firehose
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 útvonal megváltozik, előfordulhat, hogy nem sikerül olyan fájlokat bevinnie, amelyek a könyvtár frissítésének időpontjában már jelen vannak az új könyvtárban.
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.