Mettre en veille une tâche Dataflow

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 :

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 :

  1. 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.
  2. 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

  1. Accédez à la page Tâches Dataflow.

    Accéder aux tâches

  2. Cliquez sur la tâche que vous souhaitez suspendre.

    Pour suspendre une tâche, son état doit être running (en cours d'exécution).

  3. 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.

  1. Ouvrez votre shell.

  2. 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 list
    

    Si vous ne définissez pas l'indicateur --region, les tâches Dataflow de toutes les régions disponibles s'affichent.

  3. Exécutez la commande suivante :

    gcloud dataflow jobs pause JOB_ID --region=REGION
    

    Remplacez 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

  1. Accédez à la page Tâches Dataflow.

    Accéder aux tâches

  2. 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).

  3. 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.

  1. Ouvrez votre shell.

  2. Répertoriez les ID des tâches Dataflow suspendues, puis notez l'ID de la tâche que vous souhaitez reprendre :

    gcloud dataflow jobs list
    

    Si vous ne définissez pas l'indicateur --region, les tâches Dataflow de toutes les régions disponibles s'affichent.

  3. Exécutez la commande suivante :

    gcloud dataflow jobs resume JOB_ID --region=REGION
    

    Remplacez 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