Was ist der Verzeichnisauflistungsmodus von Autoloader?
AutoLoader verwendet den Verzeichnisauflistungsmodus standardmäßig. Im Verzeichnisauflistungsmodus identifiziert Auto Loader neue Dateien, indem es das Eingabeverzeichnis auflistet. Der Verzeichnisauflistungsmodus ermöglicht ihnen das schnelle Starten von Autoloader-Streams ohne berechtigungsbasierte Konfigurationen außer dem Zugriff auf Ihre Daten im Cloudspeicher.
Verwenden Sie für eine optimale Leistung im Verzeichnisauflistungsmodus Databricks Runtime 9.1 oder höher. In diesem Artikel werden die Standardfunktionen des Verzeichnisauflistungsmodus sowie Optimierungen basierend auf der lexikalischen Sortierung von Dateien beschrieben.
Wie funktioniert der Verzeichnisauflistungsmodus?
Azure Databricks hat den Verzeichnisauflistungsmodus für Autoloader optimiert, damit Dateien im Cloudspeicher effizienter ermittelt werden können, als mit anderen Apache Spark-Optionen.
Wenn Sie beispielsweise Dateien haben, die alle 5 Minuten als /some/path/YYYY/MM/DD/HH/fileName
hochgeladen werden, listet die Apache Spark-Dateiquelle alle Unterverzeichnisse parallel auf, um alle Dateien in diesen Verzeichnissen zu finden. Der folgende Algorithmus schätzt die Gesamtzahl der LIST
-API-Verzeichnisaufrufe an den Objektspeicher:
1 (Basisverzeichnis) + 365 (pro Tag) * 24 ( pro Stunde) = 8761 Aufrufe
Durch den Empfang einer komprimierten Antwort vom Speicher verringert der Autoloader die Anzahl von API-Aufrufen auf die Anzahl der Dateien im Speicher geteilt durch die Anzahl der Ergebnisse, die von jedem API-Aufruf zurückgegeben werden. Auf diese Weise werden Ihre Cloudkosten erheblich reduziert. Die folgende Tabelle zeigt die Anzahl der Dateien, die von jedem API-Aufruf an den allgemeinen Objektspeicher zurückgegeben werden:
Pro Aufruf zurückgegebene Ergebnisse | Objektspeicher |
---|---|
1000 | S3 |
5.000 | ADLS Gen2 |
1024 | GCS |
Inkrementelle Auflistung (veraltet)
Wichtig
Diese Funktion wurde eingestellt. Databricks empfiehlt die Verwendung des Dateibenachrichtigungsmodus anstelle einer inkrementellen Auflistung.
Hinweis
Verfügbar in Databricks Runtime 9.1 LTS und höheren Versionen.
Inkrementelle Auflistung ist für Azure Data Lake Storage Gen2 (abfss://
), S3 (s3://
) und GCS (gs://
) verfügbar.
Für lexikographisch generierte Dateien nutzt Auto Loader die lexikalische Dateireihenfolge und die optimierten Auflistungs-APIs, um die Effizienz der Verzeichnisauflistung zu verbessern, indem es die kürzlich aufgenommenen Dateien auflistet, anstatt den Inhalt des gesamten Verzeichnisses aufzulisten.
Standardmäßig erkennt Auto Loader automatisch, ob ein bestimmtes Verzeichnis für die inkrementelle Auflistung geeignet ist, indem es Dateipfade von zuvor abgeschlossenen Verzeichnislisten überprüft und vergleicht. Um die Vollständigkeit der Daten im auto
-Modus sicherzustellen, löst Auto Loader automatisch eine vollständige Verzeichnisliste aus, nachdem 7 aufeinanderfolgende inkrementelle Listen abgeschlossen wurden. Sie können die Häufigkeit vollständiger Verzeichnislisten steuern, indem Sie cloudFiles.backfillInterval
so festlegen, dass asynchrone Abgleiche in einem bestimmten Intervall ausgelöst werden.
Lexikalische Sortierung von Dateien
Damit Dateien lexikalisch sortiert werden können, müssen neue hochgeladene Dateien über ein Präfix verfügen, das lexikografischer als vorhandene Dateien ist. Einige Beispiele für lexikalisch sortierte Verzeichnisse sind unten dargestellt.
Dateien mit Versionsangabe
Delta Lake führt Commits in Tabellentransaktionsprotokollen in einer lexikalischen Reihenfolge durch.
<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 lädt CDC-Dateien auf versionierte Weise in AWS S3 hoch.
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
Datumspartitionierte Dateien
Dateien können in einem datumspartitionierten Format hochgeladen werden. Einige Beispiele:
// <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
Beim Hochladen von Dateien mit Datumspartitionierung sind einige Punkte zu beachten:
- Monate, Tage, Stunden und Minuten müssen mit Nullen aufgefüllt werden, um die lexikalische Reihenfolge sicherzustellen (sollte als
hour=03
hochgeladen werden, anstatthour=3
oder2021/05/03
anstelle von2021/5/3
). - Dateien müssen nicht unbedingt in lexikalischer Reihenfolge in das tiefste Verzeichnis hochgeladen werden, solange die Verarbeitung weniger häufig erfolgt als die Zeitgranularität des übergeordneten Verzeichnisses.
Einige Dienste, die Dateien in einer datumspartitionierten lexikalischen Reihenfolge hochladen können, sind:
- Azure Data Factory können so konfiguriert werden, dass Dateien in lexikalischer Reihenfolge hochgeladen werden. Ein Beispiel finden Sie hier.
- Kinesis Firehose
Ändern des Quellpfads für Autoloader
In Databricks Runtime 11.3 LTS und höher können Sie den Verzeichniseingabepfad für Autoloader ändern, der mit dem Verzeichnisauflistungsmodus konfiguriert ist, ohne ein neues Prüfpunktverzeichnis auswählen zu müssen.
Warnung
Diese Funktion wird für den Dateibenachrichtigungsmodus nicht unterstützt. Wenn der Dateibenachrichtigungsmodus verwendet und der Pfad geändert wird, können Sie möglicherweise keine Dateien erfassen, die zum Zeitpunkt der Verzeichnisaktualisierung bereits im neuen Verzeichnis vorhanden sind.
Wenn Sie beispielsweise einen täglichen Erfassungsauftrag ausführen möchten, der alle Daten aus einer nach Tagen organisierten Verzeichnisstruktur lädt, z. B. /YYYYMMDD/
, können Sie denselben Prüfpunkt verwenden, um die Erfassungsstatusinformationen jeden Tag in einem anderen Quellverzeichnis zu verfolgen und gleichzeitig Statusinformationen für Dateien beizubehalten, die aus allen zuvor verwendeten Quellverzeichnissen erfasst wurden.