Tous les produits
Search
Centre de documentation

E-MapReduce:Partition nodes using Node Labels

Dernière mise à jour :Aug 09, 2026

Les libellés de nœud YARN permettent de partitionner les nœuds afin d'isoler physiquement différents types de tâches lors de la planification. Créez des libellés de nœud en fonction de vos besoins métier et des types de nœud.

Informations générales

Dans YARN, les files d'attente et les libellés de nœud constituent deux stratégies clés pour la gestion et la planification des ressources, chacune ayant un objectif distinct.

  • Une file d'attente est une méthode logique de partitionnement des ressources qui permet d'allouer les ressources de calcul d'un cluster à différents groupes d'utilisateurs ou applications selon des ratios prédéfinis. Cette approche garantit que les différentes équipes ou charges de travail reçoivent une part équitable des ressources, même dans un environnement de cluster partagé.

  • Les libellés de nœud permettent d'étiqueter des nœuds spécifiques au sein d'un cluster et de prendre des décisions d'allocation de ressources plus fines basées sur ces étiquettes. Cela est particulièrement important pour les applications nécessitant des fonctionnalités matérielles spécifiques, telles que des GPU ou des nœuds à haute mémoire.

Combinez les files d'attente et les libellés de nœud pour obtenir une gestion des ressources et une planification des tâches plus flexibles.

Les stratégies de partitionnement courantes incluent le classement par type de charge de travail (par exemple, synchronisation des données, traitement par lots ou tâches en temps réel) ou par type d'instance (par exemple, nœuds optimisés pour le CPU, la mémoire ou accélérés par GPU).

Prérequis

  • Un cluster avec le service YARN activé doit être créé. Pour plus d'informations, consultez Créer un cluster.

  • Le planificateur YARN du cluster doit être le Capacity Scheduler. Actuellement, seul le Capacity Scheduler prend en charge la planification basée sur des partitions avec des libellés de nœud.

Exemple

Scénario

Une organisation divise ses files d'attente de cluster en une file d'attente d'entrepôt de données (warehouse) et une file d'attente d'analyse de données (analysis) en fonction des besoins en ressources des équipes. Elle partitionne également les ressources du cluster en deux partitions : batch et streaming. L'équipe de l'entrepôt de données utilisera 60 % des ressources batch et 70 % des ressources streaming. L'équipe d'analyse de données utilisera 30 % des ressources batch et 20 % des ressources streaming. Pour les ressources non étiquetées, la file d'attente warehouse reçoit 60 % et la file d'attente analysis reçoit 30 %, tandis que 10 % sont réservés à d'autres besoins. Le diagramme suivant illustre ce partitionnement.

image

Cet exemple montre comment combiner les files d'attente et les libellés pour isoler physiquement les tâches hors ligne des autres charges de travail. Les étapes suivantes utilisent un cluster Data Lake EMR-5.16.0. La procédure est similaire pour les autres types de cluster.

Étape 1 : Modifier les files d'attente de ressources

  1. Connectez-vous à la console EMR on ECS. Dans la colonne Actions de votre cluster cible, cliquez sur Services. Cliquez ensuite sur YARN.

  2. Sur la page du service YARN, cliquez sur l'onglet Edit Resource Queue, puis cliquez sur Manage Queues.

  3. Sur la page Manage Child Queues, ajoutez la file d'attente warehouse et la file d'attente analysis.

    • La Queue Capacity de la file d'attente de l'entrepôt est de 60 % et le Queue Capacity de la file d'attente d'analyse est de 30 %. Les 10 % restants sont alloués à la file d'attente par défaut. Le Status de toutes les files d'attente est défini sur Enabled.

    • La page se présente désormais comme suit.

      La page Edit Resource Queue indique que le planificateur actuel est capacity-scheduler. Sous la file d'attente root, il existe trois sous-files d'attente : analysis (Queue Capacity 30 %, Max. Capacity 100 %), warehouse (Queue Capacity 60 %, Max. Capacity 100 %) et default (Queue Capacity 10 %, Max. Capacity 100 %). L'état des trois files d'attente est Running. Une étiquette Not Effective Yet apparaît à côté du service YARN en haut de la page, indiquant que les modifications de configuration n'ont pas encore été déployées.

  4. Cliquez sur Not Effective Yet. Dans la boîte de dialogue Configurations to Take Effect, cliquez sur refresh_queues pour appliquer la configuration des files d'attente.

    Dans le tableau Custom Effective Configuration, recherchez la ligne correspondant au composant ResourceManager et au fichier de configuration capacity-scheduler.xml.

Étape 2 : Créer des partitions de nœuds

  1. Cliquez sur l'onglet Partitions, puis cliquez sur Add Partition pour ajouter la partition streaming.

    • Dans la boîte de dialogue Add Partition, spécifiez le Partition name, sélectionnez un Partition Type et sélectionnez les Associated Node Groups.

      Paramètre

      Description

      Partition Name

      Dans cet exemple, le nom de la partition est streaming.

      Partition Type

      Dans cet exemple, sélectionnez exclusive. Cela garantit que seuls les conteneurs demandant une partition correspondante sont planifiés sur ces nœuds.

      Associated Node Groups

      Dans cet exemple, la partition streaming est associée à emr-task-3. Ce groupe de nœuds est composé d'instances optimisées pour la mémoire, adaptées aux tâches en temps réel qui stockent de grandes quantités de données intermédiaires avec une faible latence. Attribuez les groupes de nœuds en fonction des caractéristiques de votre activité et des types d'instances de nœud.

  2. Répétez les étapes pour ajouter la partition batch. Le résultat final est le suivant.

    Après avoir créé les partitions, la page Partitions répertorie trois partitions : DEFAULT_PARTITION (Accessible Queues : all, Node Group : emr-core, Partition Type : Exclusive), streaming (Accessible Queues : root et root.default, Node Group : emr-task-3, Partition Type : Exclusive) et batch (Accessible Queues : root et root.default, Node Groups : emr-task-1 et emr-task-2, Partition Type : Exclusive). Un indicateur d'état orange Not Effective Yet apparaît dans la barre de navigation supérieure. Vous devez cliquer sur Deploy and Take Effect pour appliquer la configuration.

  3. Après avoir ajouté les partitions, cliquez sur Not Effective Yet. Dans la boîte de dialogue Configurations to Take Effect, cliquez sur refresh_labels pour terminer la configuration des partitions de nœuds.

    Dans la section Custom Effective Configuration, le fichier de configuration du composant ResourceManager est node-labels.xml.

  4. Une fois la configuration appliquée, consultez les Total Resources pour chaque partition.

    Par exemple, les ressources totales de la partition streaming s'affichent sous la forme <memory:4096, vCores:8> et celles de la partition batch sous la forme <memory:8192, vCores:16>.

Étape 3 : Activer la gestion de l'association partition-file d'attente

  1. Sur la page Edit Resource Queue, sélectionnez successivement les partitions batch et streaming, puis cliquez sur Enable Partition-queue Association Management.

  2. Dans la boîte de dialogue Enable Partition-queue Association Management, configurez la Queue Capacity pour chaque file d'attente au sein des partitions.

    • Pour la partition batch, définissez la analysis Queue Capacity à 30 %, celle de warehouse Queue Capacity à 60 %, et celle de default Queue Capacity à 10 %.

    • Pour la partition streaming, définissez la analysis Queue Capacity à 20 %, celle de warehouse Queue Capacity à 70 %, et celle de default Queue Capacity à 10 %.

    Remarque

    Dans cet exemple, toutes les files d'attente ont l'autorisation de s'exécuter dans toutes les partitions. Dans une configuration réelle, vous pouvez définir la capacité d'une file d'attente spécifique dans une partition sur 0 afin de garantir que seules les tâches provenant de files d'attente désignées s'exécutent dans la partition.

  3. Après avoir configuré l'association partition-file d'attente, cliquez sur Not Effective Yet. Dans la boîte de dialogue Configurations to Take Effect, cliquez sur refresh_queues pour appliquer les modifications.

  4. Sur l'interface web YARN, vérifiez que les partitions de nœuds sont actives.

    • Page Node Labels

      Le tableau de cette page comprend les colonnes Label Name, Label Type, Num Of Active NMs et Total Resources. Il affiche trois enregistrements : <DEFAULT_PARTITION> (Exclusive Partition, 2 NMs actifs, ressources : memory:8192, vCores:16), batch (Exclusive Partition, 2 NMs actifs, ressources : memory:8192, vCores:16) et streaming (Exclusive Partition, 1 NM actif, ressources : memory:4096, vCores:8).

    • Page Scheduler

      Dans la section Application Queues de la page Scheduler, trois partitions sont configurées : DEFAULT_PARTITION (<memory:8192, vCores:16>), Partition: batch (<memory:8192, vCores:16>) et Partition: streaming (<memory:4096, vCores:8>). Les partitions de libellés de nœud batch et streaming contiennent toutes deux la file d'attente root avec les sous-files d'attente default, warehouse et analysis. Le type de planificateur est Capacity Scheduler, avec une allocation minimale de <memory:32, vCores:1> et une allocation maximale de <memory:4096, vCores:8>.

Étape 4 : Soumettre une tâche à une partition

Après avoir configuré les files d'attente et les libellés du cluster, soumettez des tâches à exécuter sur des files d'attente et des nœuds spécifiques.

  1. Connectez-vous au nœud maître du cluster et accédez au répertoire d'installation de Spark, par exemple /opt/apps/SPARK3/spark-3.3.1-hadoop3.2-1.1.1.

    cd /opt/apps/SPARK3/spark-3.3.1-hadoop3.2-1.1.1
  2. Dans un environnement de production, téléchargez le fichier JAR de votre tâche pour soumettre une tâche Spark. Cet exemple utilise spark-submit pour soumettre une tâche.

    ./bin/spark-submit --class org.apache.spark.examples.SparkLR --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 2g --conf spark.yarn.am.nodeLabelExpression=batch --conf spark.yarn.executor.nodeLabelExpression=batch --queue=warehouse examples/jars/spark-examples_2.12-3.3.1.jar

    Paramètre

    Description

    class

    La classe principale de l'application : org.apache.spark.examples.SparkLR.

    master

    L'environnement d'exécution de la tâche : yarn.

    deploy-mode

    L'emplacement où le driver est lancé : cluster.

    driver-memory

    La quantité de mémoire pour le driver : 1g.

    executor-memory

    La quantité de mémoire par executor : 2g.

    spark.yarn.am.nodeLabelExpression

    L'expression de libellé pour les nœuds sur lesquels l'ApplicationMaster peut s'exécuter : batch.

    spark.yarn.executor.nodeLabelExpression

    L'expression de libellé pour les nœuds sur lesquels les executors peuvent s'exécuter : batch.

    queue

    La file d'attente YARN spécifique à laquelle la tâche est soumise : warehouse.

    Remarque

    Si vous spécifiez uniquement une file d'attente sans indiquer de partition lors de la soumission d'une tâche, celle-ci est envoyée à la partition par défaut de la file d'attente. Vous pouvez modifier la partition par défaut d'une file d'attente sur la page Edit Resource Queue en cliquant sur Edit pour cette file d'attente.

  3. Sur l'interface web du cluster YARN, vérifiez que la tâche SparkLR soumise à la file d'attente warehouse s'exécute sur la partition batch.

Les files d'attente YARN et les partitions de nœuds assurent conjointement une isolation logique et physique des ressources, empêchant les interférences entre les tâches et garantissant la stabilité des applications critiques.

FAQ

  • Lorsque je soumets une tâche Spark à l'aide de spark-submit, pourquoi la tâche ne s'exécute-t-elle pas sur la partition spécifiée ?

    • Vérifiez si le paramètre spark.yarn.executor.nodeLabelExpression est inclus dans votre commande de soumission.

    • Confirmez que vos paramètres sur les pages Partitions et Edit Resource Queue sont actifs.

  • Lorsque je soumets une tâche Spark à l'aide de spark-submit, pourquoi l'état de la tâche reste-t-il ACCEPTED ?

    1. Vérifiez que la file d'attente à laquelle la tâche a été soumise dispose de ressources disponibles. Si ce n'est pas le cas, attendez que d'autres tâches libèrent des ressources avant de resoumettre la tâche.

    2. Si la file d'attente dispose de ressources disponibles, cliquez sur l'ID de la tâche sur l'interface web YARN pour afficher les détails de la tâche et vérifier la description Diagnostics. Vous pouvez voir le message suivant : « Queue's AM resource limit exceeded ». Cela indique que bien que la file d'attente dispose de ressources, les ressources de l'Application Master (AM) sont insuffisantes. Les ressources d'une file d'attente sont allouées à la fois à l'AM et aux executors. Les ressources AM servent à lancer l'application principale, tandis que les ressources executor sont utilisées pour le traitement des tâches. Par conséquent, ajustez le ratio d'allocation des ressources de la file d'attente et augmentez la proportion de ressources AM afin de garantir que les tâches Spark puissent être soumises avec succès.

      Diagnostics:   [Wed Dec 25 16:24:10 +0800 2024] Application is added to the scheduler and is not yet activated. Queue's AM resource limit exceeded. Details : AM
                     Partition = &lt;DEFAULT_PARTITION&gt;; AM Resource Request = &lt;memory:2048, vCores:1&gt;; Queue Resource Limit for AM = &lt;memory:2048, vCores:4&gt;; User
                     AM Resource Limit of the queue = &lt;memory:224, vCores:1&gt;; Queue AM Resource Usage = &lt;memory:896, vCores:1&gt;;
    3. Ajustez le ratio de ressources AM sur la page de configuration du service YARN. Recherchez le fichier capacity_scheduler.xml et modifiez la valeur de l'élément de configuration yarn.scheduler.capacity.maximum-am-resource-percent. Par exemple, passez de 0,25 à 0,5.

    Remarque

    Ajustez le pourcentage de ressources AM par défaut défini par yarn.scheduler.capacity.maximum-am-resource-percent en fonction de votre cas d'utilisation spécifique. Par exemple, si votre cluster traite fréquemment un grand nombre de tâches avec de petits volumes de données, vous pouvez augmenter le pourcentage de ressources AM.

Documentation connexe