Co to jest tryb listy katalogów automatycznego modułu ładującego?
Automatycznie ładujący 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 listy katalogów umożliwia szybkie uruchamianie strumieni automatycznego modułu ładującego bez żadnych konfiguracji uprawnień innych niż dostęp 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 szacuje łączną liczbę wywołań katalogu interfejsu 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 wywołanie | Magazyn obiektów |
---|---|
1000 | S3 |
5000 | ADLS Gen2 |
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 usługi Azure Data Lake Storage Gen2 (abfss://
), S3 (s3://
) i GCS (gs://
).
W przypadku plików wygenerowanych leksykograficznie usługa Auto Loader korzysta z porządkowania plików leksykalnych i zoptymalizowanych interfejsów API wyświetlania listy, aby zwiększyć wydajność wyświetlania listy katalogów, wyświetlając ostatnio pozyskane pliki, a nie wyświetlając zawartości 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ć ostateczną kompletność danych w auto
trybie, funkcja automatycznego ładowania automatycznie wyzwala pełną listę katalogów po ukończeniu 7 kolejnych list przyrostowych. Częstotliwość pełnych list katalogów można kontrolować, ustawiając ustawienie cloudFiles.backfillInterval
wyzwalania asynchronicznych wypełniania w danym interwale.
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 tabeli 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 na partycje daty
Pliki można przekazać w formacie podzielonym na partycje daty. 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 przekazywania plików z partycjonowaniem dat należy pamiętać o następujących kwestiach:
- Miesiące, dni, godziny, minuty muszą być pozostawione zerami, 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 kolejności leksykalnej w najgłębszym katalogu, o ile przetwarzanie odbywa się rzadziej niż stopień szczegółowości czasu katalogu nadrzędnego.
Niektóre usługi, które mogą przekazywać pliki w kolejności leksykalnej podzielonej na partycje daty, to:
- Usługę Azure Data Factory można skonfigurować do przekazywania plików w kolejności leksykalnej. Zobacz przykład tutaj.
- Kinesis Firehose
Zmienianie ścieżki źródłowej dla automatycznego modułu ładującego
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 jest używany tryb powiadamiania o plikach i ścieżka zostanie zmieniona, pozyskanie plików, które są już obecne w nowym katalogu w momencie aktualizacji katalogu, może się nie powieść.
Jeśli na przykład chcesz uruchomić codzienne zadanie pozyskiwania, które ładuje wszystkie dane ze struktury katalogów zorganizowanej według dnia, na /YYYYMMDD/
przykład , 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.