Co to jest tryb listowania katalogów Auto Loader?
Auto Loader domyślnie używa trybu listy katalogów. W trybie listy katalogów funkcja automatycznego ładowania identyfikuje nowe pliki, wyświetlając katalog wejściowy. Tryb wyświetlania katalogu umożliwia szybkie uruchamianie strumieni Auto Loader bez potrzeby konfiguracji uprawnień, poza dostępem do danych w magazynie w chmurze.
Aby uzyskać najlepszą wydajność w trybie listy katalogów, użyj środowiska Databricks Runtime 9.1 lub nowszego. W tym artykule opisano domyślne funkcje trybu wyświetlania listy katalogów, a także optymalizacje na podstawie kolejności leksykalnej plików.
Jak działa tryb wyświetlania listy katalogów?
Usługa Azure Databricks ma zoptymalizowany tryb wyświetlania listy katalogów dla automatycznego modułu ładującego w celu wydajniejszego odnajdywania plików w magazynie w chmurze niż inne opcje platformy Apache Spark.
Jeśli na przykład pliki są przekazywane co 5 minut jako /some/path/YYYY/MM/DD/HH/fileName
, aby znaleźć wszystkie pliki w tych katalogach, źródło plików platformy Apache Spark wyświetla listę wszystkich podkatalogów równolegle. Poniższy algorytm ocenia całkowitą liczbę wywołań API LIST
do magazynu obiektów.
1 (katalog podstawowy) + 365 (dziennie) * 24 (na godzinę) = 8761 wywołań
Po otrzymaniu spłaszczonej odpowiedzi z magazynu funkcja automatycznego ładowania zmniejsza liczbę wywołań interfejsu API do liczby plików w magazynie podzielonych przez liczbę wyników zwracanych przez każde wywołanie interfejsu API, co znacznie zmniejsza koszty chmury. W poniższej tabeli przedstawiono liczbę plików zwracanych przez każde wywołanie interfejsu API dla wspólnego magazynu obiektów:
Wyniki zwrócone na jedno wywołanie | Przechowywanie obiektów |
---|---|
1000 | S3 |
5000 | ADLS |
1024 | GCS |
Lista przyrostowa (przestarzała)
Ważne
Ta funkcja jest przestarzała. Usługa Databricks zaleca używanie trybu powiadomień o plikach zamiast listy przyrostowej.
Uwaga
Dostępne w środowisku Databricks Runtime 9.1 LTS lub nowszym.
Lista przyrostowa jest dostępna dla Azure Data Lake Storage (abfss://
), S3 (s3://
) oraz GCS (gs://
).
W przypadku plików wygenerowanych leksykograficznie, Auto Loader korzysta z leksykograficznego porządkowania plików i zoptymalizowanych interfejsów API listowania, aby zwiększyć wydajność listowania katalogów, wyświetlając ostatnio zarejestrowane pliki zamiast wyświetlać zawartość całego katalogu.
Domyślnie moduł automatycznego ładowania automatycznie wykrywa, czy dany katalog ma zastosowanie do listy przyrostowej, sprawdzając i porównując ścieżki plików z wcześniej ukończonymi listami katalogów. Aby zapewnić kompletność danych w trybie auto
, Auto Loader automatycznie wyzwala pełną listę katalogów po zakończeniu 7 kolejnych list przyrostowych. Częstotliwość pełnych list katalogów można kontrolować, ustawiając cloudFiles.backfillInterval
do wyzwalania asynchronicznych uzupełnień w danym przedziale czasowym.
Porządkowanie leksykalne plików
Aby pliki były uporządkowane leksykalnie, nowe przekazane pliki muszą mieć prefiks, który jest leksykograficznie większy niż istniejące pliki. Poniżej przedstawiono kilka przykładów katalogów uporządkowanych leksykalnie.
Wersjonowane pliki
Usługa Delta Lake wykonuje zatwierdzenia w dziennikach transakcji tabel w porządku leksykalnym.
<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
...
Usługa AWS DMS przekazuje pliki CDC do usługi AWS S3 w sposób wersjonowany.
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
Pliki podzielone według daty
Pliki można przekazać w formacie sformatowanym według dat. Oto kilka przykładów:
// <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
Podczas przesyłania plików z podziałem na daty należy pamiętać o następujących kwestiach:
- Miesiące, dni, godziny i minuty muszą być uzupełnione zerami z przodu, aby zapewnić porządkowanie leksykalne (należy przekazać jako
hour=03
, zamiasthour=3
lub2021/05/03
zamiast2021/5/3
). - Pliki nie muszą być przekazywane w porządku leksykalnym w najgłębszym katalogu, o ile przetwarzanie odbywa się rzadziej niż granularność czasowa katalogu nadrzędnego.
Niektóre usługi, które mogą przekazywać pliki w leksykalnej kolejności podzielonej według daty, to:
- Usługę Azure Data Factory można skonfigurować do przekazywania plików w kolejności leksykalnej. Zobacz przykład tutaj.
- Kinesis Firehose
Zmień ścieżkę źródłową dla automatycznej ładowarki
W środowisku Databricks Runtime 11.3 LTS lub nowszym można zmienić ścieżkę wejściową katalogu dla modułu automatycznego ładowania skonfigurowanego z trybem listy katalogów bez konieczności wybierania nowego katalogu punktów kontrolnych.
Ostrzeżenie
Ta funkcja nie jest obsługiwana w trybie powiadomień plików. Jeśli używany jest tryb powiadamiania o plikach i zmieniona zostanie ścieżka, może dojść do błędu w przypadku pobierania plików, które już znajdują się w nowym katalogu w chwili jego aktualizacji.
Jeśli na przykład chcesz uruchomić codzienne zadanie pozyskiwania, które ładuje wszystkie dane ze struktury katalogów zorganizowanej według dnia, na przykład /YYYYMMDD/
, możesz użyć tego samego punktu kontrolnego, aby śledzić informacje o stanie pozyskiwania w innym katalogu źródłowym każdego dnia przy zachowaniu informacji o stanie dla plików pozyskanych ze wszystkich wcześniej używanych katalogów źródłowych.