Utilisez l'option de service "pause-on-failure" (suspendre en cas d'échec) pour conserver l'état de vos tâches par lot Dataflow. Cette fonctionnalité vous permet de suspendre l'exécution des tâches, de résoudre les problèmes externes au pipeline et de reprendre le traitement sans perdre le travail effectué. Lorsqu'une tâche est suspendue à l'aide de cette fonctionnalité, vous ne pouvez pas modifier le code du pipeline ni les configurations des VM de nœud de calcul, comme le type de machine.
En activant cette fonctionnalité, vous pouvez mieux gérer les coûts des ressources et améliorer la fiabilité des tâches en cas d'indisponibilité temporaire ou de contraintes de quota. Vous pouvez également garder le contrôle sur le cycle de vie de votre pipeline en configurant des durées de suspension maximales lorsque vous activez la fonctionnalité "pause-on-failure". Vous pouvez également suspendre ou reprendre manuellement les pipelines pour lesquels l'indicateur "pause-on-failure" est activé.
Avantages de la fonctionnalité "pause-on-failure"
L'option de service "pause-on-failure" vous permet de conserver la progression des job par lot en cas d'interruption, ce qui réduit le temps de calcul total et les dépenses en ressources.
- Conservation des points de contrôle : en cas d'échec d'une tâche, vous pouvez la reprendre à partir du dernier point de contrôle enregistré au lieu de la redémarrer depuis le début. Vous n'avez donc pas besoin de retraiter les blocs de données terminés, ce qui signifie que vous n'avez pas à payer pour refaire un travail qui a déjà été effectué.
- Atténuation des dépendances externes : protégez vos pipelines contre les problèmes temporaires, tels que les pannes temporaires ou les limites de débit dans les services externes. La suspension de la tâche vous permet de résoudre la cause première avant de reprendre l'exécution sans perdre le travail effectué.
- Gestion des échecs non déterministes : pour les charges de travail sujettes à des échecs intermittents ou non déterministes, cette option vous permet de sécuriser la progression incrémentielle à chaque tentative séquentielle, ce qui évite l'échec total de la tâche.
- Gestion des ressources et des quotas : suspendez les tâches par lot de priorité inférieure pour libérer temporairement des quotas ou réaffecter des ressources à forte valeur ajoutée, telles que des GPU ou des TPU, à des charges de travail urgentes comme l'entraînement ou l'inférence de modèles de ML sans perdre leur progression de référence.
Compatibilité et limites
La suspension d'une tâche (manuellement ou en cas d'échec) est soumise aux exigences et limites suivantes :
- La tâche Dataflow doit être un job par lot.
- La tâche doit utiliser Dataflow Shuffle.
- Vous devez spécifier l'
pause_on_failureoption de service lorsque vous exécutez la tâche. - La tâche ne doit pas avoir échoué précédemment à la suspension.
Comportement des tâches avec la fonctionnalité "pause-on-failure"
Lorsque vous activez la fonctionnalité "pause-on-failure", votre tâche est automatiquement suspendue après l'échec d'un élément de travail quatre fois. Ces échecs sont identifiés dans vos journaux
comme des messages de tâche contenant Error message from worker et des messages de nœud de calcul
contenant Completed work item ITEM_NUMBER
UNSUCCESSFULLY. Les autres types d'échecs, tels que les ruptures de stock et les erreurs de quota, ne déclenchent pas de suspension automatique. Au lieu de cela, ces échecs entraînent l'échec normal de la tâche. L'activation de la fonctionnalité "pause-on-failure" vous permet également de suspendre manuellement une tâche.
Transitions d'état des tâches
Lorsqu'une tâche Dataflow est suspendue, elle passe par les états suivants :
- Suspension : état intermédiaire dans lequel la tâche interrompt le traitement, supprime vos VM de nœud de calcul et archive l'état du backend. Les VM vous sont toujours facturées jusqu'à ce que le service ait fini de les supprimer.
- Suspendue : la tâche est complètement arrêtée. À ce stade, vous n'êtes facturé que pour les données Shuffle archivées.
Comportements exceptionnels
La fonctionnalité "pause-on-failure" peut se comporter de manière inattendue dans les scénarios suivants :
- Si vous suspendez manuellement une tâche qui est sur le point de se terminer, elle peut se terminer au lieu d'être suspendue.
- Dans de rares cas, une tâche peut ne pas être suspendue. Dans ce cas, la tâche revient à l'état "running" (en cours d'exécution) si vous l'avez suspendue manuellement, ou elle passe à l'état "failed" (échec) si elle est suspendue en raison d'une erreur.
Reprise du traitement
Lorsque la tâche reprend, le service gère les éléments de travail comme suit :
- Travail terminé : le service ne retraite aucune étape ni aucun élément de travail qui étaient complètement terminés lorsque la tâche a été suspendue.
- Travail en cours : tous les éléments de travail qui étaient en cours lorsque la tâche a été suspendue sont retraités depuis le début.
- Nombre d'échecs : tous les nombres d'échecs des éléments de travail sont réinitialisés à zéro, ce qui signifie que votre tâche ne sera plus automatiquement suspendue tant qu'un élément de travail n'aura pas échoué quatre fois de plus.
Activer la fonctionnalité "pause-on-failure"
Pour activer la fonctionnalité "pause-on-failure" pour votre tâche, utilisez l'option de service Dataflow pause_on_failure lorsque vous exécutez votre tâche.
Java
--dataflowServiceOptions=pause_on_failure
Python
--dataflow_service_options=pause_on_failure
Go
--dataflow_service_options=pause_on_failure
Spécifier une durée de suspension maximale
Par défaut, votre tâche reste suspendue pendant sept jours maximum (7d). Vous pouvez configurer manuellement cette durée de suspension maximale entre une heure (1h) et sept jours (7d).
Seuls d (jours) et h (heures) sont acceptés. Un jour est défini comme 24 heures.
Cela peut ne pas correspondre à la durée d'un jour calendaire en raison de facteurs tels que l'heure d'été.
Une fois la durée de suspension maximale écoulée, votre tâche est annulée et ne peut plus être reprise.
Par exemple, l'exemple suivant définit la durée de suspension maximale sur un jour :
Java
--dataflowServiceOptions=pause_on_failure=pause_duration:1d
Python
--dataflow_service_options=pause_on_failure=pause_duration:1d
Go
--dataflow_service_options=pause_on_failure=pause_duration:1d
Suspendre manuellement une tâche Dataflow
Pour suspendre manuellement une tâche, procédez comme suit.
Console
Accédez à la page Tâches Dataflow.
Cliquez sur la tâche que vous souhaitez suspendre.
Pour suspendre une tâche, son état doit être running (en cours d'exécution).
Sur la page d'informations de la tâche, cliquez sur Pause (Suspendre).
Si le bouton "Pause" ne s'affiche pas, votre tâche ne peut pas être suspendue en raison des limites de la fonctionnalité "pause-on-failure".
gcloud
Pour suspendre une tâche Dataflow, vous pouvez utiliser la gcloud dataflow
jobs commande dans
Cloud Shell ou dans un terminal local installé avec
gcloud CLI.
Ouvrez votre shell.
Répertoriez les ID des tâches Dataflow en cours d'exécution, puis notez l'ID de la tâche que vous souhaitez suspendre :
gcloud dataflow jobs listSi vous ne définissez pas l'indicateur
--region, les tâches Dataflow de toutes les régions disponibles s'affichent.Exécutez la commande suivante :
gcloud dataflow jobs pause JOB_ID --region=REGIONRemplacez JOB_ID par l'ID de tâche que vous avez noté et REGION par la région de la tâche.
API
Pour suspendre une tâche à l'aide de l'API REST de Dataflow, utilisez le
projects.locations.jobs.update
point de terminaison et transmettez le corps de requête suivant :
{
"requestedState": "JOB_STATE_PAUSING"
}
Important : Ne transmettez pas accidentellement
JOB_STATE_PAUSED comme requestedState.
Annuler une tâche Dataflow en cours de suspension ou suspendue
Vous pouvez annuler une tâche Dataflow en cours de suspension ou suspendue comme d'habitude. Une fois la tâche annulée, elle ne vous est plus facturée, mais elle ne peut plus être reprise.
Une tâche suspendue est automatiquement annulée une fois sa durée de suspension maximale expirée.
Reprendre une tâche Dataflow
Pour reprendre manuellement votre tâche suspendue, procédez comme suit :
Console
Accédez à la page Tâches Dataflow.
Cliquez sur la tâche que vous souhaitez reprendre.
Pour reprendre une tâche, son état doit être paused (suspendue) et non pausing (en cours de suspension).
Sur la page des détails de la tâche, cliquez sur Resume (Reprendre).
gcloud
Pour reprendre une tâche Dataflow, vous pouvez utiliser la gcloud dataflow
jobs commande dans
Cloud Shell ou dans un terminal local installé avec
gcloud CLI.
Ouvrez votre shell.
Répertoriez les ID des tâches Dataflow suspendues, puis notez l'ID de la tâche que vous souhaitez reprendre :
gcloud dataflow jobs listSi vous ne définissez pas l'indicateur
--region, les tâches Dataflow de toutes les régions disponibles s'affichent.Exécutez la commande suivante :
gcloud dataflow jobs resume JOB_ID --region=REGIONRemplacez JOB_ID par l'ID de tâche et REGION par la région de la tâche.
API
Pour reprendre une tâche à l'aide de l'API REST de Dataflow, utilisez leprojects.locations.jobs.updatepoint de terminaison et transmettez le corps de requête suivant :
{
"requestedState": "JOB_STATE_RUNNING"
}
Étape suivante
- Découvrez comment arrêter un pipeline en cours d'exécution.
- Découvrez Dataflow Shuffle pour les tâches par lot, qui est nécessaire pour utiliser cette fonctionnalité.
- Consultez le guide Résoudre les problèmes liés aux pipelines pour résoudre les erreurs.
- Découvrez comment résoudre les problèmes liés aux tâches par lot lentes ou bloquées.