Configurer les streams Auto Loader en mode de liste de répertoires
Cette page décrit comment configurer les streams Auto Loader pour utiliser le mode de liste de répertoires afin de découvrir et d'ingérer de manière incrémentielle les données cloud.
Auto Loader utilise le mode de liste de répertoires default. En mode de listage de répertoire, Auto Loader identifie les nouveaux fichiers en listant le répertoire d'entrée. Le mode de listing de répertoires vous permet de start rapidement des Stream Auto Loader sans aucune configuration de permissions autre que l'accès à vos données sur le stockage cloud.
Pour des performances optimales avec le mode de listage de répertoires, utilisez Databricks Runtime 9.1 ou une version ultérieure. Cet article décrit la fonctionnalité default du mode de liste de répertoires ainsi que les optimisations basées sur l'ordre lexical des fichiers.
Databricks recommande le mode de notification de fichiers utilisant les événements de fichiers sur les emplacements externes plutôt que le mode de listage de répertoires pour la plupart des charges de travail, en particulier avec les Trigger continus tels que Trigger.ProcessingTime, où le mode de listage de répertoires liste en continu le répertoire entier et peut augmenter considérablement les coûts d'API LIST. Si vous utilisez Auto Loader en mode de listage de répertoires aujourd'hui, Databricks vous recommande de migrer vers le mode de notification de fichiers à l'aide d'événements de fichiers pour obtenir des améliorations de performances significatives et une réduction des coûts. Voir Configurer les streams Auto Loader en mode notification de fichiers.
Comment fonctionne le mode de listage de répertoire ?
Databricks a optimisé le mode de listage des répertoires pour Auto Loader afin de découvrir les fichiers dans le stockage cloud plus efficacement que d'autres options Apache Spark.
Par exemple, si vous avez des fichiers being upload toutes les 5 minutes comme /some/path/YYYY/MM/DD/HH/fileName, pour trouver tous les fichiers dans ces répertoires, la source de fichier Apache Spark liste tous les sous-répertoires en parallèle. L'algorithme suivant estime le nombre total d'appels d'annuaire API LIST vers le stockage d'objets :
1 (répertoire de base) + 365 (par jour) * 24 (par heure) = 8761 appels
En recevant une réponse aplatie du stockage, Auto Loader réduit le nombre d'appels d'API au nombre de fichiers dans le stockage divisé par le nombre de résultats renvoyés par chaque appel d'API, réduisant considérablement vos coûts de cloud. Le tableau suivant présente le nombre de fichiers renvoyés par chaque appel d'API pour le stockage d'objets courant :
Résultats renvoyés par appel | Stockage d'objets |
|---|---|
1000 | S3 |
5 000 | ADLS |
1024 | GCS |
Liste incrémentielle (obsolète)
Le listage incémental est obsolète. Databricks recommande d'utiliser le mode de notification de fichiers avec des événements de fichier à la place. Le listage incémental ne garantit pas l'ordre de traitement des fichiers. Ne l'utilisez pas pour l'ingestion ordonnée de fichiers.
Disponible dans Databricks Runtime 9.1 LTS et versions ultérieures.
Le listage incrémentiel est disponible pour Azure Data Lake Storage (abfss://), S3 (s3://) et GCS (gs://).
Pour les fichiers générés lexicographiquement, Auto Loader tire parti de l'ordonnancement lexicographique des fichiers et des APIs de listage optimisées pour améliorer l'efficacité du listage de répertoires en listant les fichiers récemment ingérés plutôt que le contenu de l'intégralité du répertoire.
Lorsque cloudFiles.useIncrementalListing est défini sur auto, Auto Loader détecte automatiquement si un répertoire donné est applicable pour une liste incrémentielle en vérifiant et en comparant les chemins de fichier des listes de répertoires précédemment terminées. Pour assurer l'exhaustivité des données en mode auto, Auto Loader Trigger automatiquement une liste complète de répertoires après avoir terminé 7 listes incrémentielles consécutives. Vous pouvez contrôler la fréquence des listes complètes de répertoires en définissant cloudFiles.backfillInterval pour Trigger des remplissages asynchrones à un intervalle donné.
Tri lexical des fichiers
Pour que les fichiers soient classés par ordre lexicographique, les nouveaux fichiers uploadés doivent avoir un préfixe qui est lexicographiquement supérieur aux fichiers existants. Quelques exemples de répertoires triés lexicalement sont présentés ci-dessous.
L'ordre lexical améliore l'efficacité de la découverte des fichiers, mais Auto Loader ne garantit pas l'ordre dans lequel les fichiers sont découverts ou traités. Concevez vos pipelines pour gérer les arrivées de fichiers désordonnées. Pour obtenir des conseils, consultez Gérer les données désordonnées.
Fichiers versionnés
Delta Lake effectue des commits aux journaux de transactions des tables dans un ordre lexical.
<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 upload les fichiers CDC vers AWS S3 de manière versionnée.
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
Fichiers partitionnés par date
Les fichiers peuvent être soumis par upload dans un format partitionné par date. Voici quelques exemples :
// <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
Lorsque les fichiers sont upload avec le partitionnement par date, certains points à prendre en compte sont :
- Les mois, jours, heures, minutes doivent être remplis de zéros à gauche pour garantir l'ordre lexicographique (doivent être upload comme
hour=03, au lieu dehour=3ou2021/05/03au lieu de2021/5/3). - Les fichiers n'ont pas nécessairement besoin d'être uploadés dans l'ordre lexical dans le répertoire le plus profond, tant que le traitement est moins fréquent que la granularité temporelle du répertoire parent.
Voici quelques services qui peuvent upload des fichiers dans un ordre lexical partitionné par date :
- Azure Data Factory peut être configuré pour upload des fichiers dans un ordre lexical. Consultez un exemple ici.
- Kinesis Firehose
Changer le chemin source pour Auto Loader
Dans Databricks Runtime 11.3 LTS et versions ultérieures, vous pouvez modifier le chemin d'entrée du répertoire pour Auto Loader configuré avec le mode de listage de répertoire sans avoir à choisir un nouveau répertoire de point de contrôle.
Cette fonctionnalité n'est pas prise en charge pour le mode de notification de fichier. Si le mode de notification de fichier est utilisé et que le chemin est modifié, vous risquez de ne pas pouvoir ingérer les fichiers qui sont déjà présents dans le nouveau répertoire au moment de la mise à jour du répertoire.
Par exemple, si vous souhaitez exécuter un job d'ingestion quotidien qui charge toutes les données d'une structure de répertoires organisée par jour, telle que /YYYYMMDD/, vous pouvez utiliser le même point de contrôle pour suivre les informations d'état d'ingestion à travers un répertoire source différent chaque jour tout en maintenant les informations d'état pour les fichiers ingérés depuis tous les répertoires sources précédemment utilisés.