View a markdown version of this page

Gestion des clusters virtuels - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestion des clusters virtuels

Le cluster virtuel est un espace de noms Kubernetes que vous enregistrez sur Amazon EMR. Vous pouvez créer, décrire, répertorier et supprimer des clusters virtuels. Ils ne consomment pas de ressources supplémentaires dans votre système. Un cluster virtuel unique est mappé à un seul espace de noms Kubernetes. Compte tenu de cette relation, vous pouvez modéliser les clusters virtuels de la même façon que les espaces de noms Kubernetes pour répondre à vos besoins. Découvrez les cas d'utilisation possibles dans la documentation de présentation des concepts de Kubernetes.

Pour enregistrer Amazon EMR dans un espace de noms Kubernetes sur un cluster Amazon EKS, vous avez besoin du nom du cluster EKS et de l'espace de noms configuré pour l'exécution de votre charge de travail. Ces clusters enregistrés dans Amazon EMR sont appelés clusters virtuels, car ils ne gèrent pas le calcul physique ou le stockage, mais pointent vers un espace de noms Kubernetes dans lequel votre charge de travail est planifiée.

Note

Avant de créer un cluster virtuel, vous devez d'abord effectuer les étapes 1 à 8 dans Configuration d'Amazon EMR on EKS.

Création d'un cluster local

Exécutez la commande ci-dessous pour créer un cluster virtuel en enregistrant Amazon EMR dans un espace de noms sur un cluster EKS. virtual_cluster_nameRemplacez-le par le nom que vous fournissez pour votre cluster virtuel. Remplacez eks_cluster_name par le nom du cluster EKS. Remplacez le par l'espace de noms namespace_name avec lequel vous souhaitez enregistrer Amazon EMR.

aws emr-containers create-virtual-cluster \ --name virtual_cluster_name \ --container-provider '{ "id": "eks_cluster_name", "type": "EKS", "info": { "eksInfo": { "namespace": "namespace_name" } } }'

Vous pouvez également créer un fichier JSON qui inclut les paramètres requis pour le cluster virtuel, comme le montre l'exemple ci-dessous.

{ "name": "virtual_cluster_name", "containerProvider": { "type": "EKS", "id": "eks_cluster_name", "info": { "eksInfo": { "namespace": "namespace_name" } } } }

Exécutez ensuite la commande create-virtual-cluster ci-dessous avec le chemin d'accès au fichier JSON.

aws emr-containers create-virtual-cluster \ --cli-input-json file://./create-virtual-cluster-request.json
Note

Pour valider la création réussie d'un cluster virtuel, consultez l'état des clusters virtuels en exécutant la commande list-virtual-clusters ou en accédant à la page Clusters virtuels dans la console Amazon EMR.

Liste des clusters virtuels

Exécutez la commande ci-dessous pour consulter l'état des clusters virtuels.

aws emr-containers list-virtual-clusters

Description d'un cluster virtuel

Exécutez la commande ci-dessous pour obtenir plus de détails sur un cluster virtuel, tels que l'espace de noms, l'état et la date d'enregistrement. 123456Remplacez-le par l'ID de votre cluster virtuel.

aws emr-containers describe-virtual-cluster --id 123456

Suppression d'un cluster virtuel

Exécutez la commande ci-dessous pour supprimer un cluster virtuel. 123456Remplacez-le par l'ID de votre cluster virtuel.

aws emr-containers delete-virtual-cluster --id 123456

États du cluster virtuel

Le tableau ci-dessous décrit les quatre états possibles d'un cluster virtuel.

State Description

RUNNING

Le cluster virtuel est en état RUNNING.

TERMINATING

L'arrêt demandé du cluster virtuel est en cours.

TERMINATED

L'arrêt demandé est terminé.

ARRESTED

L'arrêt demandé a échoué en raison de l'insuffisance des autorisations.

Limites de tâches simultanées pour les clusters virtuels

Vous pouvez configurer des limites de tâches simultanées sur un cluster virtuel Amazon EMR on EKS afin de contrôler le nombre d'exécutions de tâches exécutées simultanément et le nombre de tâches pouvant attendre dans la file d'attente. Vous définissez la limite de simultanéité (maxConcurrentJobRuns) et la profondeur de file d'attente (maxInQueueJobRuns) indépendamment, afin de limiter les exécutions de tâches en cours, les exécutions de tâches en file d'attente, ou les deux. Lorsque vous définissez ces limites, l'StartJobRunAPI fournit une contre-pression au niveau du cluster virtuel. La tâche dépasse la limite d'exécution, attendez dans la file d'attente à l'PENDINGétat SUBMITTED ou au lieu de démarrer immédiatement, et une fois la file d'attente pleine, StartJobRun rejette les autres soumissions. Par exemple, si vous configurez un cluster virtuel pour autoriser 500 exécutions de tâches simultanées et 100 exécutions de tâches en file d'attente, la 101e soumission en file d'attente est rejetée et vous pouvez rééquilibrer cette charge de travail sur d'autres clusters virtuels du même cluster EKS ou ajouter de la capacité. Lorsque vous n'avez pas défini de limite de simultanéité et que la profondeur de la file d'attente ne cesse d'augmenter, de sorte que les exécutions de tâches restent dans PENDING l'état SUBMITTED ou plus longtemps avant de démarrer, cela peut indiquer que le cluster EKS sous-jacent manque de ressources de calcul et ne peut pas planifier de nouveaux pods assez rapidement. Dans ce cas, acheminez la charge de travail vers un autre cluster ou ajoutez de la capacité.

Les limites de tâches simultanées ajoutent une couche de contrôle devant le planificateur Kubernetes et la ResourceQuota fonctionnalité du site Web de Kubernetes. Comme elles sont appliquées avant la création des podsStartJobRun, la charge excédentaire est mise en file d'attente ou rejetée au niveau de l'API, ce qui protège le cluster sous-jacent avant que les tâches ne l'atteignent. Kubernetes applique toujours le plafond réel du processeur et de la mémoire en dessous.

Principaux avantages des limites d'emplois simultanées

  • Empêche la surcharge due aux voisins bruyants  : limite le nombre d'exécutions de tâches en cours et en file d'attente par cluster virtuel, de sorte qu'un seul cluster virtuel ne puisse pas monopoliser le cluster EKS partagé et provoquer des échecs de planification des voisins bruyants pour les autres clusters virtuels.

  • Active la mise en forme du trafic  : renvoie un rejet immédiat lorsque la file d'attente d'un cluster virtuel est pleine, afin que vous puissiez rediriger les soumissions vers d'autres clusters virtuels au lieu de surcharger un seul cluster virtuel.

  • Fournit de la visibilité  : émet le nombre d'exécutions de tâches actives JobsRunning et en JobsInQueue CloudWatch file d'attente par cluster virtuel dans l'AWS/EMRContainersespace de noms toutes les 5 minutes, ce qui vous donne un signal de santé pour la planification.

Débuter avec les limites de tâches simultanées

Vous configurez les limites de tâches simultanées à l'aide du schedulerConfiguration champ sur un cluster virtuel. Ce champ accepte deux paramètres :

maxConcurrentJobRuns

Le nombre maximum d'exécutions de tâches qui peuvent se trouver dans RUNNING cet état à tout moment.

maxInQueueJobRuns

Le nombre maximum d'exécutions de tâches qui peuvent être dans l'SUBMITTEDétat PENDING ou (profondeur de la file d'attente) à tout moment.

AWS INTERFACE DE LIGNE DE COMMANDE (CLI)

Pour définir des limites lorsque vous créez un cluster virtuel, schedulerConfiguration spécifiez-les dans votre demande.

aws emr-containers create-virtual-cluster \ --name my-virtual-cluster \ --container-provider '{ ... }' \ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'

Pour modifier les limites d'un cluster virtuel existant, utilisez la update-virtual-cluster commande.

aws emr-containers update-virtual-cluster \ --id virtual-cluster-id \ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'

Pour supprimer les limites d'un cluster virtuel, passez un champ videschedulerConfiguration. Cela efface la configuration, aucune limite ne s'applique et le cluster virtuel retrouve son comportement par défaut (illimité). Notez que l'omission schedulerConfiguration de la demande laisse les limites existantes inchangées. Vous devez transmettre un objet vide pour les effacer.

aws emr-containers update-virtual-cluster \ --id virtual-cluster-id \ --scheduler-configuration '{}'

Pour afficher les limites actuelles et le nombre de tâches en temps réel, utilisez la describe-virtual-cluster commande. La réponse inclut à la fois votre schedulerConfiguration nom et un SchedulerStatus objet avec la valeur actuelle activeJobRunCount etinQueueJobRunCount.

Note

Lorsque vous soumettez une tâche exécutée à un cluster virtuel dont la file d'attente est pleine, StartJobRun renvoie unValidationException.

Choix des valeurs pour max ConcurrentJobRuns et max InQueueJobRuns

Les bonnes limites dépendent de trois facteurs : la quantité de travail que votre cluster Amazon EKS peut exécuter en une seule fois, le niveau de rafale de vos soumissions et la manière dont vous souhaitez que le cluster virtuel se comporte lorsqu'il est plein. Suivez les conseils suivants pour choisir un point de départ, puis affinez-le à partir des compteurs en direct.

Réglage maximum ConcurrentJobRuns (créneaux en cours)

maxConcurrentJobRunsest un garde-fou basé sur la granularité des tâches et le nombre de tâches. Une estimation approximative peut protéger le cluster Amazon EKS sous-jacent contre la dégradation due à la charge et améliorer la disponibilité.

  • Commencez par la capacité divisée par l'encombrement par tâche. Basez-le sur les demandes de chaque tâche (pilote, exécuteurs et charge de mémoire) et ciblez environ 70 à 80 % de la capacité de votre espace de noms afin de laisser une marge de manœuvre pour la surcharge des pilotes, la mise à l'échelle des nœuds et les rafales.

  • Limitez la taille de chaque tâche (T-shirt dimensionnement). Associez spark.dynamicAllocation.maxExecutors et standardisez chaque tâche à quelques tailles, par exemple, Small (20 exécuteurs), Medium (100) et Large (environ 500), de sorte que la maxConcurrentJobRuns multiplication par le plafond corresponde de manière prévisible à la capacité au lieu d'un surprovisionnement ou d'un sous-provisionnement pour une moyenne variable. Pour des calculs plus précis, acheminez chaque classe de taille vers son propre cluster virtuel.

  • Syntonisez depuis les compteurs en direct. Commencez prudemment et augmentez progressivement la valeur pendant que vous regardez activeJobRunCount et augmentez la JobsRunning métrique dans l'AWS/EMRContainersespace de noms.

Réglage maximum InQueueJobRuns (profondeur de file d'attente)

maxInQueueJobRunscontrôle l'ampleur du backlog accepté par le cluster virtuel avant qu'il ne commence à rejeter les soumissions. Il s'agit d'un tampon d'absorption des éclats. Tenez compte des facteurs suivants.

  • Profil de rafale  : dimensionnez la file d'attente de manière à absorber les rafales de soumissions que vous attendez au-dessus de votre fréquence d'exécution. Si les pipelines planifiés déclenchent de nombreuses tâches à la fois, une file d'attente plus longue empêche les rejets intempestifs. Basez la profondeur sur la taille de rafale attendue plutôt que sur un multiple fixe demaxConcurrentJobRuns, et validez-la par rapport à la limite de temps de vidange qui suit.

  • Temps d'attente acceptable — Les tâches en file d'attente attendent qu'un créneau soit libéré. La tâche à la fin d'une file d'attente complète attend approximativement la profondeur de la file d'attente divisée par le débit d'achèvement. Par exemple, si les tâches se terminent à N par minute et que la file d'attente contient Q, la queue attend environ Q divisé par N minutes. Conservez cela dans votre SLA. Étant donné que les tâches mises en mémoire tampon échouent au bout de 30 minutes si aucun emplacement n'est libéré, optez pour une maxInQueueJobRuns taille suffisamment petite pour qu'une file d'attente complète soit épuisée en 30 minutes à un taux d'achèvement constant. Dans le cas contraire, les tâches en file d'attente sont annulées.

  • Contre-pression par rapport à la mise en mémoire tampon  : une file d'attente plus longue atténue les rafales, mais elle retarde le rejet complet de la file d'attente que vous utilisez pour la mise en forme du trafic et augmente la latence de queue. Une file d'attente moins longue échoue rapidement, ce qui donne aux clients un signal rapide et exploitable leur demandant de réessayer ou d'effectuer un autre itinéraire. Choisissez selon que vous préférez charger ou supprimer la mémoire tampon et redirigez-le.

  • Comportement du client lors d'une nouvelle tentative  : lorsque la file d'attente est pleine, StartJobRun renvoie unValidationException. Assurez-vous que vos soumissionnaires gèrent cette exception : réessayez avec backoff ou transférez la charge de travail vers un autre cluster virtuel. Réglez la profondeur de manière à ce que les rejets ne se produisent qu'en cas de surcharge réelle, et non pendant les opérations de routine.

Considérations relatives aux limites d'emplois simultanés

  • Aucune limite n'est appliquée par défaut. Les clusters virtuels et les charges de travail existants ne sont pas affectés, sauf si vous le définissez explicitement. schedulerConfiguration

  • Comme les compteurs sont gérés dans un système distribué, vous pouvez parfois vous attendre à un petit delta transitoire par rapport à la valeur réelle. La réconciliation interne permet de corriger toute dérive.