Utiliser la planification flexible des ressources dans Cloud Dataflow

Cette page explique comment activer FlexRS (planification flexible des ressources) pour les pipelines par lots et en autoscaling dans Cloud Dataflow.

FlexRS

FlexRS (planification flexible des ressources) réduit le coût des traitements par lots en utilisant des techniques de planification avancées, la fonctionnalité Cloud 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, Cloud Dataflow améliore l'expérience utilisateur si Compute Engine est amené à arrêter 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é Cloud 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 Cloud Dataflow Shuffle permet à FlexRS de mieux gérer la préemption d'une VM de calcul, car le service Cloud Dataflow n'a pas à redistribuer les données aux autres nœuds de calcul. Chaque nœud de calcul Cloud 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 Cloud 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. Cloud 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 Cloud 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 Cloud 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 (mise en file d'attente) dans l'interface de surveillance Cloud Dataflow en cas de succès, et un état Failed (échec) sinon.

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 Cloud Dataflow vérifie les paramètres d'exécution et les paramètres d'environnement GCP (Google Cloud Platform), tels que les rôles Cloud IAM et les configurations réseau. Cloud 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 y 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 GCP 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 GCP 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, Cloud Dataflow sélectionne des VM préemptives pour 90 % des nœuds de calcul du pool de serveurs. 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.

Tarification

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

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

Lorsque Cloud 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 Cloud Dataflow, quel que soit le type de nœud de calcul. Les ressources Cloud Dataflow Shuffle et de disque persistant ne font pas l'objet d'une remise.

Pour plus d'informations, consultez la page de détail des tarifs de Cloud 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.
  • Cloud Dataflow Shuffle. L'activation de FlexRS active également Cloud Dataflow Shuffle de manière automatique.

Attention : Pendant une durée limitée, vous pouvez activer FlexRS avec le SDK Apache Beam pour Java en version 2.5.0 ou supérieure, avec le SDK Apache Beam pour Python en version 2.5.0 ou supérieure, ou avec le SDK Cloud Dataflow en version 2.5.0. La compatibilité de FlexRS avec ces SDK ne sera plus assurée à partir du 1er août 2019.

Options de pipeline

SDK Apache Beam en version 2.12.0 ou ultérieure

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 Cloud 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 Cloud 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.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut us-central1 ou spécifier le point de terminaison régional europe-west1 comme region.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut n1-standard-2 ou sélectionner n1-highmem-16 pour votre type de machine workerMachineType.

L'exemple suivant montre comment ajouter à vos paramètres de pipeline habituels les indicateurs permettant d'utiliser FlexRS :

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

Si vous omettez les éléments region, maxNumWorkers et workerMachineType, le service Cloud 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 Cloud 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 Cloud 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.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut us-central1 ou spécifier le point de terminaison régional europe-west1 comme region.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut n1-standard-2 ou sélectionner n1-highmem-16 pour votre type de machine machine_type.

L'exemple suivant montre comment ajouter à vos paramètres de pipeline habituels les indicateurs permettant d'utiliser FlexRS :

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

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

SDK Apache Beam en version 2.5.0 ou ultérieure, ou SDK Cloud Dataflow en version 2.5.0

Java

Attention : Pendant une durée limitée, vous pouvez utiliser FlexRS avec le SDK Apache Beam pour Java en version 2.5.0 ou supérieure, ou avec le SDK Cloud Dataflow en version 2.5.0. La compatibilité de FlexRS avec ces SDK ne sera plus assurée à partir du 1er août 2019.

Ne spécifiez pas le paramètre flexRSGoal. Pour activer temporairement une tâche FlexRS avec le SDK Apache Beam pour Java en version 2.5.0 ou ultérieure, ou avec le SDK Cloud Dataflow en version 2.5.0, utilisez les options de pipeline suivantes :

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service

Si vous orthographiez de manière incorrecte les paramètres flexible_resource_scheduling ou shuffle_mode=service, le service Cloud Dataflow ne signale pas de message d'erreur.

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 Cloud 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.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut us-central1 ou spécifier le point de terminaison régional europe-west1 comme region.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut n1-standard-2 ou sélectionner n1-highmem-16 pour votre type de machine workerMachineType.

L'exemple suivant montre comment ajouter à vos paramètres de pipeline habituels les indicateurs permettant d'utiliser FlexRS :

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16

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

Python

Attention : Pendant une durée limitée, vous pouvez utiliser FlexRS avec le SDK Apache Beam pour Python en version 2.5.0 ou supérieure, ou avec le SDK Cloud Dataflow en version 2.5.0. La compatibilité de FlexRS avec ces SDK ne sera plus assurée à partir du 1er août 2019.

Ne spécifiez pas le paramètre flexrs_goal. Pour activer temporairement une tâche FlexRS avec le SDK Apache Beam pour Python en version 2.5.0 ou ultérieure, ou avec le SDK Cloud Dataflow en version 2.5.0, utilisez les options de pipeline suivantes :

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service

Si vous orthographiez de manière incorrecte les paramètres flexible_resource_scheduling ou shuffle_mode=service, le service Cloud Dataflow ne signale pas de message d'erreur.

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 Cloud 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.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut us-central1 ou spécifier le point de terminaison régional europe-west1 comme region.
  • Tant que l'outil est en version bêta, vous devez utiliser la valeur par défaut n1-standard-2 ou sélectionner n1-highmem-16 pour votre type de machine machine_type.

L'exemple suivant montre comment ajouter à vos paramètres de pipeline habituels les indicateurs permettant d'utiliser FlexRS :

--experiments=flexible_resource_scheduling \
--experiments=shuffle_mode=service \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

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

Surveiller les tâches FlexRS

Vous pouvez surveiller l'état de votre tâche FlexRS à deux endroits de la console Google Cloud Platform :

  1. la page des Tâches, qui affiche l'ensemble des tâches ;
  2. la page de résumé de 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, présentant des tâches dans les états "Running" (En cours d'exécution), "Queued" (En file d'attente), "Succeeded" (Réussie) et "Failed" (Échec).
Figure 1 : Liste de tâches Cloud Dataflow dans la console GCP, présentant des tâches dans les états "Running" (En cours d'exécution), "Queued" (En file d'attente), "Succeeded" (Réussie) et "Failed" (Échec).

Sur la page de Résumé de la tâche, les tâches en attente dans la file affichent le message "This job is queued and will run soon" (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 Cloud Dataflow.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.