Partager via


Configurer le chargeur automatique pour les charges de travail de production

Databricks vous recommande de suivre les meilleures pratiques en matière de diffusion en continu pour l’exécution du chargeur automatique en production.

Databricks recommande d'utiliser Auto Loader dans les pipelines déclaratifs Spark Lakeflow pour l'ingestion de données incrémentielles. Lakeflow Spark Declarative Pipelines étend les fonctionnalités d’Apache Spark Structured Streaming et vous permet d’écrire quelques lignes de Python déclaratif ou SQL pour déployer un pipeline de données de qualité de production avec :

Monitoring du chargeur automatique

Interrogation des fichiers découverts par le chargeur automatique

Note

La fonction cloud_files_state est disponible dans Databricks Runtime 11.3 LTS et les versions ultérieures.

Le chargeur automatique fournit une API SQL pour inspecter l’état d’un flux. À l’aide de la fonction cloud_files_state, vous pouvez obtenir des métadonnées sur les fichiers qui ont été découverts par un flux de chargeur automatique. Effectuez simplement des interrogations à partir de cloud_files_state, en fournissant l’emplacement du point de contrôle associé à un flux de chargeur automatique.

SELECT * FROM cloud_files_state('path/to/checkpoint');

Écouter les mises à jour de flux

Pour surveiller davantage les flux de chargeur automatique, Databricks recommande d’utiliser l’interface d’écouteur de requête de streaming d’Apache Spark.

Le chargeur automatique signale les métriques à l’écouteur de requêtes de streaming à chaque lot. Vous pouvez afficher le nombre de fichiers présents dans le backlog et la taille de ce backlog dans les métriques numFilesOutstanding et numBytesOutstanding sous l’onglet Données brutes du tableau de bord de progression des requêtes de streaming :

{
  "sources": [
    {
      "description": "CloudFilesSource[/path/to/source]",
      "metrics": {
        "numFilesOutstanding": "238",
        "numBytesOutstanding": "163939124006"
      }
    }
  ]
}

Dans Databricks Runtime 10.4 LTS et versions ultérieures, lorsque vous utilisez le mode de notification de fichier, les métriques incluent également le nombre approximatif d’événements de fichier dans la file d’attente cloud comme approximateQueueSize pour AWS et Azure.

Considérations relatives aux coûts

Lors de l’exécution du chargeur automatique, vos principales sources de coût sont les ressources de calcul et la découverte de fichiers.

Pour réduire les coûts de calculs, Databricks recommande d’utiliser des travaux Lakeflow pour planifier le chargeur automatique en tant que travaux par lots à l’aide de Trigger.AvailableNow au lieu de l’exécuter en continu, à moins que vous n'ayez des exigences en matière de faible latence. Consultez Configurer des intervalles de déclencheur Structured Streaming. Ces travaux de traitement par lots peuvent être déclenchés à l’aide de déclencheurs d’arrivée de fichiers pour réduire davantage la latence entre l’arrivée du fichier et le traitement.

Les coûts de découverte de fichiers peuvent se présenter sous la forme d’opérations de LIST sur vos comptes de stockage en mode liste d’annuaires et demandes d’API sur le service d’abonnement et service de file d’attente en mode de notification de fichier. Pour réduire les coûts de détection de fichiers, Databricks recommande :

Archiver des fichiers dans le répertoire source pour réduire les coûts

Note

Disponible dans Databricks Runtime 16.4 LTS et versions ultérieures.

Warning

  • Le paramètre cloudFiles.cleanSource supprime ou déplace les fichiers dans le répertoire source.
  • Si vous utilisez foreachBatch pour votre traitement des données, vos fichiers deviennent des candidats au déplacement ou à la suppression dès que votre opération foreachBatch se termine correctement, même si votre opération n'a consommé qu'un sous-ensemble des fichiers du lot.

Nous vous recommandons d’utiliser le chargeur automatique avec des événements de fichier pour réduire les coûts de découverte. Cela réduit également les coûts de calcul, car la découverte est incrémentielle.

Si vous ne pouvez pas utiliser d’événements de fichier et devez utiliser la liste des répertoires pour découvrir les fichiers, vous pouvez utiliser l’option cloudFiles.cleanSource pour archiver ou supprimer automatiquement des fichiers après que le chargeur automatique les traite pour réduire les coûts de découverte. Étant donné que le chargeur automatique nettoie les fichiers de votre répertoire source après le traitement, moins de fichiers doivent être répertoriés lors de la découverte.

Lorsque vous utilisez cloudFiles.cleanSource avec l’option MOVE, tenez compte des exigences suivantes :

  • Le répertoire source et le répertoire de déplacement de destination doivent se trouver dans le même emplacement externe ou volume.
  • Si votre répertoire source et de destination se trouve dans le même emplacement externe, il ne doit pas avoir de répertoires frères qui contiennent un stockage managé (par exemple, un volume managé ou un catalogue). Dans ce cas, le chargeur automatique ne peut pas obtenir les autorisations nécessaires pour écrire dans le répertoire de destination.

Databricks recommande d’utiliser cette option lorsque :

  • Votre répertoire source accumule un grand nombre de fichiers au fil du temps.
  • Vous devez conserver les fichiers traités pour la conformité ou l’audit (défini cloudFiles.cleanSource sur MOVE).
  • Vous souhaitez réduire les coûts de stockage en supprimant les fichiers après l’ingestion (défini cloudFiles.cleanSource sur DELETE). Quand vous utilisez le mode DELETE, Databricks recommande d’activer le versioning sur le compartiment afin que les suppressions effectuées par Auto Loader agissent comme des suppressions temporaires et soient disponibles en cas de mauvaise configuration. De plus, Databricks recommande de configurer des stratégies de cycle de vie cloud pour purger les anciennes versions supprimées de façon non définitive après une période de grâce spécifiée (par exemple, 60 ou 90 jours), en fonction de vos besoins en matière de récupération.

Utilisation de Trigger.AvailableNow et limitation de débit

Note

Disponible dans Databricks Runtime 10.4 LTS et versions ultérieures.

L’exécution du chargeur automatique peut être planifiée dans Lakeflow Jobs comme un programme de traitement par lots en utilisant Trigger.AvailableNow. Le déclencheur AvailableNow demandera au chargeur automatique de traiter tous les fichiers arrivés avant l’heure de début de la requête. Les nouveaux fichiers qui sont chargés après le démarrage du flux sont ignorés jusqu’au déclencheur suivant.

Avec Trigger.AvailableNow, la détection des fichiers se fait de manière asynchrone avec le traitement des données, et les données peuvent être traitées sur plusieurs micro-lots avec une limitation du débit. Par défaut, le chargeur automatique traite un maximum de 1000 fichiers par micro-lot. Vous pouvez configurer cloudFiles.maxFilesPerTrigger et cloudFiles.maxBytesPerTrigger pour déterminer le nombre de fichiers ou d’octets à traiter dans un micro-lot. La limite de fichiers est une limite stricte, mais la limite d’octets est une limite souple, ce qui signifie qu’il est possible de traiter plus d’octets que le paramètre maxBytesPerTrigger fourni. Lorsque les deux options sont fournies ensemble, le chargeur automatique traite autant de fichiers que nécessaire pour atteindre l’une des limites.

Emplacement du point de contrôle

L’emplacement du point de contrôle est utilisé pour stocker les informations d’état et de progression du flux. Databricks recommande de définir l’emplacement de point de contrôle sur un emplacement sans stratégie de cycle de vie d’objet cloud. Si les fichiers dans l’emplacement du point de contrôle sont nettoyés conformément à la stratégie, l’état du flux est endommagé. Si cela se produit, vous devez redémarrer le flux à partir de zéro.

Suivi des événements de fichier

Le chargeur automatique assure le suivi des fichiers découverts à l’emplacement du point de contrôle à l’aide de RocksDB pour fournir des garanties d’ingestion « une seule fois ». Pour les flux d’ingestion volumineux ou de longue durée, Databricks recommande la mise à niveau vers Databricks Runtime 15.4 LTS ou version ultérieure. Dans ces versions, le chargeur automatique n’attend pas que l’état rocksDB entier soit téléchargé avant le démarrage du flux, ce qui peut accélérer le temps de démarrage du flux. Si vous souhaitez empêcher les états de fichiers de croître sans limites, vous pouvez également envisager d’utiliser l’option cloudFiles.maxFileAge permettant d’expirer les événements de fichier antérieurs à un certain âge. La valeur minimale que vous pouvez définir pour cloudFiles.maxFileAge est "14 days". Les suppressions dans RocksDB apparaissent sous forme d’entrées marquées comme tombstones. Par conséquent, vous pouvez voir l’utilisation du stockage augmenter temporairement à mesure que les événements expirent, avant qu'elle ne commence à se stabiliser.

Warning

cloudFiles.maxFileAge est un mécanisme de contrôle des coûts pour les jeux de données volumineux. Un réglage trop agressif de cloudFiles.maxFileAge peut entraîner des problèmes de qualité des données, notamment l'ingestion de données en double ou des fichiers manquants. Par conséquent, Databricks recommande un paramètre conservateur pour cloudFiles.maxFileAge, par exemple 90 jours. Cette durée est similaire à ce que les solutions d'ingestion de données comparables recommandent.

Si vous essayez de régler l’option cloudFiles.maxFileAge, des fichiers non traités peuvent être ignorés par le chargeur automatique ou des fichiers déjà traités peuvent expirer et être traités à nouveau, ce qui entraîne la duplication des données. Voici quelques éléments à prendre en compte lors du choix de l’option cloudFiles.maxFileAge :

  • Si votre flux redémarre après une longue période, les événements de notification de fichiers extraits de la file d’attente qui sont antérieurs à cloudFiles.maxFileAge sont ignorés. De même, si vous utilisez la liste de répertoires, les fichiers qui ont pu apparaître pendant le temps d’arrêt et qui sont antérieurs à cloudFiles.maxFileAge sont ignorés.
  • Si vous utilisez le mode Liste des répertoires et que vous utilisez cloudFiles.maxFileAge, par exemple défini sur "1 month", que vous arrêtez votre flux et que vous le redémarrez avec cloudFiles.maxFileAge défini sur "2 months", les fichiers datant de plus d’un mois, mais plus récents que deux mois, sont retraités.

Si vous définissez cette option la première fois que vous démarrez le flux, vous n’ingérerez pas de données plus anciennes que cloudFiles.maxFileAge. Par conséquent, si vous voulez ingérer les anciennes données, vous ne devez pas définir cette option lorsque vous démarrez votre flux pour la première fois. Toutefois, vous devez définir cette option lors des exécutions ultérieures.

Déclencher des renvois réguliers à l’aide de cloudFiles.backfillInterval

Dans de rares cas, les fichiers peuvent être manqués ou en retard lorsqu’ils dépendent uniquement des systèmes de notification, par exemple lorsque les limites de rétention des messages de notification sont atteintes. Si vous avez des exigences strictes sur l’exhaustivité des données et le contrat SLA, envisagez de définir le paramètre cloudFiles.backfillInterval pour déclencher des remplissages asynchrones à un intervalle spécifié. Par exemple, définissez-le sur un jour pour les remplissages quotidiens, ou une semaine pour les remplissages hebdomadaires. Le déclenchement de renvois normaux n’entraîne pas de doublons.

Lorsque vous utilisez des événements de fichier, exécutez votre flux au moins une fois tous les 7 jours

Lorsque vous utilisez des événements de fichier, exécutez vos flux de chargeur automatique au moins une fois tous les 7 jours pour éviter une liste complète de répertoires. Exécuter fréquemment vos flux de chargeur automatique garantira que la découverte de fichiers soit incrémentielle.

Pour obtenir des meilleures pratiques complètes sur les événements de fichiers managés, consultez les meilleures pratiques pour le chargeur automatique avec les événements de fichier.