Lorsque vous utilisez Dataflow pour exécuter votre pipeline, l'exécuteur Dataflow importe votre code de pipeline et vos dépendances dans un bucket Cloud Storage, puis crée un job Dataflow. Ce job Dataflow exécute votre pipeline sur des ressources gérées dansGoogle Cloud.
- Pour les pipelines par lot qui utilisent le SDK Apache Beam Java version 2.54.0 ou ultérieure, l'exécuteur portable est activé par défaut.
- Pour les pipelines qui utilisent le SDK Java Apache Beam, l'exécuteur portable est requis lors de l'exécution de pipelines multilingues, de l'utilisation de conteneurs personnalisés ou de l'utilisation de pipelines de flux de modifications Cloud Spanner ou Cloud Bigtable. Pour les pipelines de flux Java à grande échelle, utilisez le Streaming Java Runner (par défaut).
- Pour les pipelines qui utilisent le SDK Apache Beam Python version 2.21.0 ou ultérieure, l'exécuteur portable est activé par défaut. Pour les pipelines qui utilisent le SDK Apache Beam pour Python version 2.45.0 ou ultérieure, l'exécuteur portable Dataflow est le seul exécuteur Dataflow disponible.
- Pour le SDK Apache Beam pour Go, l'exécuteur portable est le seul exécuteur Dataflow disponible.
L'exécuteur portable utilise une architecture basée sur les services qui profite à de nombreux pipelines :
L'exécuteur portable Dataflow vous permet de précompiler votre conteneur Python, ce qui peut améliorer le temps de démarrage des VM et les performances de l'autoscaling horizontal. Pour en savoir plus, consultez la section Dépendances Python prédéfinies.
L'exécuteur portable Dataflow est compatible avec les pipelines multilingues, une fonctionnalité qui permet à votre pipeline Apache Beam d'utiliser des transformations définies dans d'autres SDK Apache Beam. L'exécuteur portable Dataflow permet d'utiliser les transformations Java à partir d'un pipeline du SDK Python et d'utiliser les transformations Python à partir d'un pipeline du SDK Java. Lorsque vous exécutez des pipelines Apache Beam sans l'exécuteur portable, l'exécuteur Dataflow utilise des nœuds de calcul spécifiques au langage.
Limites et restrictions
L'exécuteur portable Dataflow présente les exigences et limites suivantes :
- Fonctionnalités réservées au Portable Runner : les fonctionnalités suivantes ne sont compatibles qu'avec le Portable Runner :
- Transformations gérées et
RunInferenceen Java. - Conteneurs personnalisés.
- VM de nœud de calcul basées sur ARM.
- DoFn fractionnables. La compatibilité avec le programme d'exécution non portable est à l'étude.
- Transformations gérées et
- L'exécuteur portable Dataflow nécessite Streaming Engine pour les jobs de traitement en flux continu.
- Étant donné que l'exécuteur portable Dataflow nécessite Streaming Engine pour les jobs de traitement en flux continu, toute transformation Apache Beam nécessitant l'exécuteur portable Dataflow nécessite également l'utilisation de Streaming Engine pour les jobs de traitement en flux continu. Par exemple, le connecteur d'E/S Lite Pub/Sub pour le SDK Apache Beam pour Python est une transformation multilingue nécessitant l'exécuteur Dataflow portable. Si vous essayez de désactiver Streaming Engine pour un job ou un modèle utilisant cette transformation, le job échoue.
- Pour les pipelines de streaming qui utilisent le SDK Java Apache Beam, les classes
MapStateetSetStatene sont pas compatibles avec l'exécuteur portable. Pour utiliser les classesMapStateetSetStateavec des pipelines Java, activez Streaming Engine, désactivez l'exécuteur portable et utilisez le SDK Apache Beam version 2.58.0 ou ultérieure. - Pour les pipelines par lot et par flux qui utilisent le SDK Apache Beam Java, la classe
AfterSynchronizedProcessingTimen'est pas acceptée. - Bien que le Portable Runner soit plus évolutif que le Non-Portable Runner dans de nombreux cas, l'utilisation de la mémoire peut être plus élevée pour le sharding fixe.
- Les modèles classiques Dataflow ne peuvent pas être exécutés avec une version du runner Dataflow différente de celle avec laquelle ils ont été créés. Cela signifie que les modèles classiques fournis par Google ne peuvent pas activer le Portable Runner. Pour activer le Portable Runner pour les modèles personnalisés, définissez l'indicateur approprié lorsque vous créez le modèle. Cette option dépend de la version du SDK que vous utilisez :
- Versions 2.74 et ultérieures du SDK Beam :
--experiments=enable_portable_runner. - Versions 2.73 et antérieures du SDK Beam :
--experiments=use_runner_v2.
- Versions 2.74 et ultérieures du SDK Beam :
En raison d'un problème d'autoscaling connu, le Portable Runner est désactivé par défaut pour les pipelines Java par lot qui nécessitent un traitement avec état. Vous pouvez toujours activer le Portable Runner pour ces pipelines (voir Activer le Portable Runner), mais les performances des pipelines peuvent être fortement limitées.
Dans certains pipelines, le Portable Runner peut augmenter la fréquence des échecs de cohérence. L'erreur suivante peut s'afficher dans les fichiers journaux : "Échec de la vérification de cohérence interne. La sortie est probablement incorrecte. Veuillez réessayer." Une solution possible consiste à ajouter une transformation
Reshuffleaprès l'étapeJoin/GrouByKey. Si le taux d'échec n'est pas tolérable et que la mesure d'atténuation ne résout pas le problème, essayez de désactiver le Portable Runner.
Activer l'exécuteur portable
Pour activer l'exécuteur portable Dataflow, suivez les instructions de configuration de votre SDK Apache Beam.
Java
L'exécuteur portable Dataflow nécessite le SDK Apache Beam Java version 2.30.0 ou ultérieure (la version 2.44.0 ou ultérieure est recommandée).
Pour les pipelines par lot qui utilisent le SDK Apache Beam Java version 2.54.0 ou ultérieure, l'exécuteur portable est activé par défaut.
Pour activer l'exécuteur portable, exécutez votre job avec la valeur d'expérience qui correspond à votre version du SDK Beam et à votre type de pipeline :
- SDK Beam version 2.74 et ultérieure :
enable_portable_runner(traitement par lot) ouenable_streaming_java_runner(streaming). - Versions 2.73 et antérieures du SDK Beam :
use_runner_v2.
Pour en savoir plus, consultez Définir les options de pipeline expérimentales.
Python
Pour les pipelines qui utilisent le SDK Apache Beam Python version 2.21.0 ou ultérieure, l'exécuteur portable est activé par défaut.
L'exécuteur portable Dataflow n'est pas compatible avec les versions 2.20.0 et antérieures du SDK Apache Beam Python.
Dans certains cas, votre pipeline peut ne pas utiliser l'exécuteur portable, même si votre pipeline s'exécute sur une version compatible du SDK. Pour exécuter le job avec le Portable Runner, définissez la valeur de l'expérience qui correspond à votre version du SDK Beam :
- Versions 2.74 et ultérieures du SDK Beam :
enable_portable_runner. - Versions 2.73 et antérieures du SDK Beam :
use_runner_v2.
Pour en savoir plus, consultez Définir les options de pipeline expérimentales.
Go
L'exécuteur portable Dataflow est le seul exécuteur Dataflow disponible pour le SDK Apache Beam pour Go. L'exécuteur portable est activé par défaut.
Désactiver le Portable Runner
Pour désactiver l'exécuteur Dataflow portable, suivez les instructions de configuration de votre SDK Apache Beam.
Java
Pour désactiver le Portable Runner, définissez la valeur de l'expérience qui correspond à votre version du SDK Beam :
- Versions 2.74 et ultérieures du SDK Beam :
disable_portable_runner. - Versions 2.73 et antérieures du SDK Beam :
disable_runner_v2.
Le job sera défini par défaut sur l'exécuteur non portable (exécuteur Java de streaming pour le streaming). Pour en savoir plus, consultez Définir les options de pipeline expérimentales.
Python
La désactivation de l'exécuteur portable n'est pas compatible avec les versions 2.45.0 et ultérieures du SDK Apache Beam pour Python.
Pour les versions antérieures du SDK Python, si votre job est identifié comme utilisant le test auto_runner_v2, vous pouvez désactiver l'exécuteur portable en définissant le test disable_runner_v2. Pour en savoir plus, consultez Définir les options de pipeline expérimentales.
Go
L'exécuteur portable Dataflow ne peut pas être désactivé dans Go. Il s'agit du seul exécuteur Dataflow disponible pour le SDK Apache Beam pour Go.
Surveiller le job
Utilisez l'interface de surveillance pour afficher les métriques de tâches Dataflow, telles que l'utilisation de la mémoire, l'utilisation du processeur, etc.
Les journaux de VM de nœud de calcul sont disponibles via l'explorateur de journaux et l'interface de surveillance de Dataflow. Les journaux de VM de nœud de calcul incluent les journaux du processus de test de l'exécuteur et les journaux des processus du SDK. Vous pouvez utiliser les journaux de VM pour résoudre les problèmes de votre tâche.
Résoudre les problèmes liés à l'exécuteur portable
Pour résoudre les problèmes liés aux jobs utilisant l'exécuteur Dataflow portable, suivez les étapes de dépannage du pipeline standard. La liste suivante fournit des informations supplémentaires sur le fonctionnement de l'exécuteur portable Dataflow :
- Les jobs qui utilisent l'exécuteur portable Dataflow exécutent deux types de processus sur la VM de nœud de calcul : le processus du SDK et le processus de test de l'exécuteur. Selon le pipeline et le type de VM, il peut y avoir un ou plusieurs processus du SDK, mais il n'y a qu'un seul processus d'exploitation de l'exécuteur par VM.
- Les processus du SDK exécutent le code utilisateur et d'autres fonctions spécifiques au langage. Le processus de test de l'exécuteur gère tout le reste.
- Le processus d'exploitation de l'exécuteur attend que tous les processus du SDK s'y connectent avant de commencer à demander du travail à partir de Dataflow.
- Les jobs peuvent être retardés si la VM de nœud de calcul télécharge et installe des dépendances au démarrage des processus du SDK. Si des problèmes surviennent lors d'un processus du SDK, par exemple lors du démarrage ou de l'installation de bibliothèques, le nœud de calcul signale son état comme non opérationnel. Si les temps de démarrage augmentent, activez l'API Cloud Build sur votre projet et envoyez le pipeline avec le paramètre suivant :
--prebuild_sdk_container_engine=cloud_build. - Étant donné que l'exécuteur Dataflow portable utilise des points de contrôle, chaque nœud de calcul peut attendre jusqu'à cinq secondes lors de la mise en mémoire tampon des modifications avant de les envoyer pour un traitement ultérieur. Par conséquent, une latence d'environ six secondes est attendue.
- Pour diagnostiquer les problèmes dans votre code utilisateur, examinez les journaux de nœud de calcul des processus du SDK. Si vous trouvez des erreurs dans les journaux de test de l'exécuteur, contactez l'assistance pour signaler un bug.
- Pour déboguer les erreurs courantes liées aux pipelines multilingues Dataflow, consultez le guide Conseils d'utilisation des pipelines multilingues.