Utiliser la planification flexible des ressources dans Cloud Dataflow

Cette page explique comment activer FlexRS (planification flexible des ressources) pour les pipelines de traitement par lot soumis à l'autoscaling dans Dataflow.

FlexRS

La fonctionnalité FlexRS réduit le coût de traitement par lot en s'appuyant sur des techniques de planification avancées, le service Dataflow Shuffle, et une combinaison d'instances de VM préemptives et de VM standards. Grâce à cette exécution combinée de VM préemptives et de VM standards en parallèle, Dataflow améliore l'expérience utilisateur lorsque Compute Engine arrête des instances de VM préemptives lors d'un événement système. FlexRS contribue à garantir que le pipeline continue de progresser et que vous ne perdez pas le travail déjà réalisé lorsque Compute Engine préempte vos VM préemptives.

Les tâches gérées avec FlexRS utilisent la fonctionnalité Dataflow Shuffle basée sur les services pour les jointures et le regroupement. Par conséquent, les tâches FlexRS n'utilisent pas de ressources de disque persistant pour stocker les résultats de calculs temporaires. L'utilisation de Dataflow Shuffle permet à FlexRS de mieux gérer la préemption d'une VM de nœud de calcul, car le service Dataflow n'a pas à redistribuer les données aux autres nœuds de calcul. Chaque nœud de calcul Dataflow a toujours besoin d'un petit volume de disque persistant de 25 Go pour stocker l'image de la machine et les journaux temporaires.

Les tâches FlexRS présentent un délai de planification. Par conséquent, FlexRS convient mieux aux charges de travail dont la ponctualité ou l'urgence ne sont pas critiques, par exemple les tâches quotidiennes ou hebdomadaires pouvant être exécutées dans une certaine fenêtre temporelle.

Planification retardée

Lorsque vous envoyez une tâche FlexRS, le service Dataflow la met en file d'attente et l'envoie pour exécution dans les six heures suivant la création de la tâche. Dataflow sélectionne le moment optimal pour démarrer la tâche dans cette fenêtre de temps, suivant la capacité disponible et d'autres facteurs.

Lorsque vous envoyez une tâche FlexRS, le service Dataflow exécute les étapes suivantes :

  1. Il renvoie un identifiant de tâche immédiatement après l'envoi de la tâche.
  2. Il effectue une validation préliminaire.
  3. Il utilise le résultat de cette validation préliminaire pour déterminer l'étape suivante :

    1. En cas de succès, il met la tâche en file d'attente, où elle attend son lancement différé.
    2. Dans tous les autres cas, la tâche échoue et le service Dataflow signale les erreurs.

Par conséquent, une fois que vous avez envoyé une tâche FlexRS, celle-ci affiche un ID et un état Queued (En file d'attente) dans l'interface de surveillance Dataflow en cas de succès, et un état Failed (Échec) en cas d'échec.

Validation préliminaire

Les tâches FlexRS ne sont pas lancées immédiatement après leur envoi. Au cours de la validation préliminaire, le service Dataflow vérifie les paramètres d'exécution et les paramètres d'environnement Google Cloud, tels que les rôles Cloud IAM et les configurations réseau. Dataflow valide la tâche autant que possible au moment de l'envoi et signale les erreurs potentielles. Vous n'êtes pas facturé pour ce processus de validation préliminaire.

L'étape de validation préliminaire n'exécute pas le code de l'utilisateur. Pour identifier d'éventuels problèmes, vous devez vérifier votre code à l'aide de l'outil Direct Runner d'Apache Beam ou de tâches autres que FlexRS. S'il y a des changements dans l'environnement Google Cloud entre la création de la tâche et son exécution différée, la tâche peut franchir le cap de la validation préliminaire mais échouer quand même à son lancement effectif.

Activer FlexRS

Lorsque vous créez une tâche FlexRS, un quota est défini pour la tâche, même si celle-ci est encore à l'état Queued (En file d'attente). Par conséquent, avant d'activer FlexRS, vérifiez que vous disposez de quotas de ressources de projet Google Cloud suffisants pour lancer votre tâche. Cela inclut un quota supplémentaire pour les processeurs préemptifs, les processeurs standards et les adresses IP, à moins que vous ne désactiviez le paramètre d'adresse IP publique.

Si votre quota est insuffisant, il est possible que votre compte ne dispose pas de ressources suffisantes lors du déploiement de votre tâche FlexRS. Par défaut, Dataflow sélectionne des VM préemptives pour 90 % des nœuds de calcul du pool de nœuds de calcul. Lorsque vous planifiez votre quota de processeurs, assurez-vous de disposer d'un quota suffisant de VM préemptives. Par défaut, vous n'avez pas de quota distinct de VM préemptives. Vous devez explicitement demander un quota de VM préemptives. Dans le cas contraire, votre tâche FlexRS ne disposera pas des ressources nécessaires pour s'exécuter dans le délai imparti.

Prix

Les tâches FlexRS font l'objet d'une facturation pour les ressources suivantes :

  • Processeurs standards et préemptifs
  • Ressources mémoire
  • Ressources Dataflow Shuffle
  • 25 Go de ressources de disque persistant par nœud de calcul

Bien que Dataflow utilise une combinaison de nœuds de calcul préemptifs et standards pour exécuter une tâche FlexRS, vous êtes facturé à un tarif réduit uniforme comparé aux prix ordinaires de Dataflow, quel que soit le type de nœud de calcul. Les ressources Dataflow Shuffle et de disque persistant ne font pas l'objet d'une remise.

Pour plus d'informations, consultez la section Détails des tarifs de Dataflow.

Exigences de FlexRS

FlexRS requiert les fonctionnalités suivantes :

  • Le SDK Apache Beam pour Java en version 2.12.0 ou supérieure, ou le SDK Apache Beam pour Python en version 2.12.0 ou supérieure.
  • Dataflow Shuffle L'activation de FlexRS active également Dataflow Shuffle de manière automatique.

Options de pipeline

Java

Pour activer une tâche FlexRS, utilisez l'option de pipeline suivante : --flexRSGoal=COST_OPTIMIZED, dont la valeur visant à optimiser les coûts signifie que le service Dataflow choisit toute ressource disponible avec une remise.

Les tâches FlexRS affectent les paramètres d'exécution suivants :

  • numWorkers définit uniquement le nombre initial de nœuds de calcul. Toutefois, vous pouvez choisir de définir maxNumWorkers pour des raisons de contrôle des coûts.
  • Vous ne pouvez pas définir autoscalingAlgorithm=NONE.
  • Vous ne pouvez pas spécifier l'indicateur zone pour des tâches FlexRS. Le service Dataflow sélectionne la zone pour toutes les tâches FlexRS de la région que vous avez spécifiée au moyen du paramètre region.
  • Vous devez sélectionner un point de terminaison régional Dataflow comme votre region.
  • Vous devez utiliser la valeur par défaut n1-standard-2 ou sélectionner n1-highmem-16 pour votre workerMachineType.

L'exemple suivant montre comment ajouter des paramètres à vos paramètres de pipeline habituels afin d'utiliser FlexRS :

    --flexRSGoal=COST_OPTIMIZED \
    --region=europe-west1 \
    --maxNumWorkers=10 \
    --workerMachineType=n1-highmem-16
    

Si vous omettez region, maxNumWorkers et workerMachineType, le service Dataflow détermine la valeur par défaut.

Python

Pour activer une tâche FlexRS, utilisez l'option de pipeline suivante : --flexrs_goal=COST_OPTIMIZED, dont la valeur visant à optimiser les coûts signifie que le service Dataflow choisit toute ressource disponible avec une remise.

Les tâches FlexRS affectent les paramètres d'exécution suivants :

  • num_workers définit uniquement le nombre initial de nœuds de calcul. Toutefois, vous pouvez choisir de définir max_num_workers pour des raisons de contrôle des coûts.
  • Vous ne pouvez pas définir autoscaling_algorithm=NONE.
  • Vous ne pouvez pas spécifier l'indicateur zone pour des tâches FlexRS. Le service Dataflow sélectionne la zone pour toutes les tâches FlexRS de la région que vous avez spécifiée au moyen du paramètre region.
  • Vous devez sélectionner un point de terminaison régional Dataflow comme votre region.
  • Vous devez utiliser la valeur par défaut n1-standard-2 ou sélectionner n1-highmem-16 pour votre machine_type.

L'exemple suivant montre comment ajouter des paramètres à vos paramètres de pipeline habituels afin d'utiliser FlexRS :

    --flexrs_goal=COST_OPTIMIZED \
    --region=europe-west1 \
    --max_num_workers=10 \
    --machine_type=n1-highmem-16
    

Si vous omettez region, max_num_workers et machine_type, le service Dataflow détermine la valeur par défaut.

Surveiller les tâches FlexRS

Vous pouvez surveiller l'état de votre tâche FlexRS dans Google Cloud Console à deux endroits :

  1. Sur la page Tâches, qui affiche l'ensemble des tâches.
  2. Sur la page Résumé de la tâche, pour la tâche que vous avez envoyée.

Sur la page des Tâches (Jobs), les tâches qui n'ont pas encore démarré apparaissent avec l'état Queued (en file d'attente).

Liste de tâches Cloud Dataflow dans la console GCP définies avec les états
Figure 1 : Liste de tâches Dataflow dans Cloud Console définies avec les états Running (En cours d'exécution), Queued (En file d'attente), Failed (Échec) et Succedeed (Succès).

Sur la page Résumé de la tâche, les tâches en file d'attente affichent le message "La tâche est en file d'attente et sera bientôt exécutée.".

Tâche de pipeline individuelle en file d'attente, affichée dans l'interface de surveillance de Cloud Dataflow.
Figure 2 : Tâche de pipeline individuelle en file d'attente, affichée dans l'interface de surveillance de Dataflow.