Résoudre les problèmes liés aux conteneurs personnalisés dans Dataflow

Ce document fournit des instructions permettant de résoudre des problèmes pouvant survenir lors de l'utilisation de conteneurs personnalisés avec Dataflow. Les problèmes de démarrage de conteneurs ou de nœuds de calcul y sont plus particulièrement traités. Si vos nœuds de calcul peuvent démarrer et progresser, suivez les instructions générales de dépannage de pipeline.

Avant de contacter l'assistance, assurez-vous d'avoir résolu les problèmes liés à votre image de conteneur :

  • Suivez les étapes pour tester votre image de conteneur localement.
  • Recherchez les erreurs dans les journaux des tâches ou dans les journaux des nœuds de calcul, et comparez les erreurs détectées avec celles contenues dans les conseils sur les erreurs courantes.
  • Assurez-vous que la version du SDK Apache Beam et la version du langage que vous utilisez pour lancer le pipeline correspondent à la version du SDK sur votre image de conteneur personnalisée.
  • Si vous utilisez Java, assurez-vous que la version majeure de Java que vous utilisez pour lancer le pipeline correspond à la version installée dans votre image de conteneur.
  • Si vous utilisez Python, assurez-vous que la version majeure et mineure de Python que vous utilisez pour lancer le pipeline correspond à la version installée dans votre image de conteneur, et que celle-ci ne présente pas de dépendances conflictuelles. Vous pouvez exécuter pip check pour confirmer.

Rechercher les journaux des nœuds de calcul liés aux conteneurs personnalisés

Vous pouvez affiner les journaux des nœuds de calcul Dataflow pour les messages d'erreur liés au conteneur à l'aide de l'explorateur de journaux :

  1. Sélectionnez les noms de journaux. Les erreurs de démarrage des conteneurs personnalisés relèvent probablement de l'un des cas suivants :

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. Sélectionnez la ressource Dataflow Step et spécifiez le job_id.

Si vous voyez des messages de journal Error Syncing pod..., suivez les conseils sur les erreurs courantes. Vous pouvez interroger ces messages de journal dans les journaux des nœuds de calcul Dataflow à l'aide de l'explorateur de journaux avec la requête suivante :

resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"

Problèmes courants

Voici quelques problèmes courants liés à l'utilisation de conteneurs personnalisés.

La tâche présente des erreurs ou a échoué, car l'image de conteneur ne peut pas être extraite

Les nœuds de calcul Dataflow doivent pouvoir accéder aux images de conteneurs personnalisées. Si le nœud de calcul ne peut pas extraire l'image en raison d'URL non valides, d'identifiants mal configurés ou d'un accès réseau manquant, le nœud de calcul ne démarre pas.

Dans le cas des tâches par lot pour lesquelles aucun travail n'a démarré et plusieurs nœuds de calcul ne peuvent pas démarrer de manière séquentielle, Dataflow fait échouer la tâche. Sinon, Dataflow consigne les erreurs, mais n'effectue aucune autre action pour éviter de détruire l'état d'une tâche de longue durée.

Pour en savoir plus sur la résolution de ce problème, consultez la section Échec de la demande d'extraction d'images avec erreur sur la page de résolution des erreurs Dataflow.

Les nœuds de calcul ne démarrent pas ou leur travail ne progresse pas

Parfois, si le conteneur SDK ne démarre pas en raison d'une erreur, Dataflow ne peut pas déterminer si l'erreur est permanente ou fatale. Dataflow tente ensuite de redémarrer en continu le nœud de calcul.

Si aucune erreur évidente ne s'affiche, mais que vous voyez des journaux [topologymanager] RemoveContainer de niveau INFO dans dataflow.googleapis.com/kubelet, ces journaux indiquent que l'image de conteneur personnalisée se ferme prématurément et n'a pas démarré. le processus du SDK des nœuds de calcul de longue durée.

Si les nœuds de calcul ont démarré correctement, mais qu'aucun travail n'a lieu, une erreur peut empêcher le démarrage du conteneur du SDK. Dans ce cas, l'erreur suivante s'affiche dans les recommandations de diagnostic :

Failed to start container

De plus, les journaux des nœuds de calcul ne contiennent pas de lignes telles que les suivantes :

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

Recherchez des erreurs spécifiques dans les journaux des nœuds de calcul et consultez les conseils sur les erreurs courantes.

Les causes les plus courantes de ces problèmes sont les suivantes :

  • Problèmes d'installation des packages, tels que les erreurs d'installation pip en raison de problèmes de dépendance. Consultez Erreur lors de la synchronisation du pod ... Échec de "StartContainer".
  • Si le conteneur utilisé n'est pas compatible avec l'architecture de processeur de la VM de nœud de calcul, des erreurs telles que exec format error peuvent s'afficher. Pour en savoir plus, consultez Erreur lors de la synchronisation du pod ... Échec de "StartContainer".
  • Erreurs avec les arguments de commande personnalisés ou avec ENTRYPOINT défini dans le fichier Dockerfile. Par exemple, un ENTRYPOINT personnalisé ne démarre pas le script de démarrage par défaut /opt/apache/beam/boot ou ne transmet pas les arguments de manière appropriée à ce script. Pour plus d'informations, consultez Modifier le point d'entrée du conteneur.
  • Erreurs de concordance de la version du SDK Apache Beam, entre l'environnement de lancement et l'environnement d'exécution. Dans un scénario d'échec, les valeurs par défaut définies dans les options du pipeline Apache Beam peuvent devenir non reconnues. Par exemple, des erreurs telles que sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15') peuvent s'afficher dans les journaux du nœud de calcul. Pour corriger les problèmes, installez dans l'image du conteneur la même version du SDK Apache Beam que celle que vous utilisez pour lancer le pipeline. Pour en savoir plus, consultez la section Rendre l'environnement de lancement compatible avec l'environnement d'exécution.