Freigeben über


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, anstatt hour=3 oder 2021/05/03 anstelle von 2021/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:

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