Bonnes pratiques pour la configuration des clusters - Amazon EMR

Bonnes pratiques pour la configuration des clusters

Utilisez les consignes de cette section pour déterminer les types d'instance, les options d'achat, ainsi que la quantité de stockage à allouer à chaque type de nœud dans un cluster EMR.

Quel type d'instance dois-je utiliser ?

Il existe plusieurs manières d'ajouter des instances Amazon EC2 à un cluster. La méthode que vous devez choisir varie selon que vous utilisez la configuration des groupes d'instances ou la configuration des parcs d'instances pour le cluster.

  • Groupes d'instances

    • Ajoutez manuellement des instances du même type aux groupes d'instances principaux et de tâches existants.

    • Ajoutez manuellement un groupe d'instances de tâches pouvant utiliser un type d'instance différent.

    • Définissez une scalabilité automatique dans Amazon EMR pour un groupe d'instances, qui ajoute ou supprime automatiquement des instances en fonction de la valeur d'une métrique Amazon CloudWatch que vous spécifiez. Pour de plus amples informations, veuillez consulter Utiliser la mise à l'échelle des clusters.

  • Parcs d'instances

    • Ajoutez un parc d'instances de tâches unique.

    • Modifiez la capacité cible des instances à la demande et des instances Spot pour les parcs d'instances principaux et de tâches existants. Pour de plus amples informations, veuillez consulter Configuration de parcs d'instances.

Une manière de planifier les instances de votre cluster consiste à exécuter un cluster de test avec un ensemble représentatif d'échantillons de données et à surveiller l'utilisation des nœuds dans le cluster. Pour de plus amples informations, veuillez consulter Affichage et surveillance d'un cluster. Une autre méthode consiste à calculer la capacité des instances que vous envisagez et à comparer cette valeur à la taille de vos données.

En général, le type de nœud primaire, qui attribue les tâches, n'a pas besoin d'une instance EC2 dotée d'une grande puissance de traitement. Les instances Amazon EC2 du type de nœud primaire, qui traitent les tâches et stockent les données dans HDFS, ont besoin d'une puissance de traitement et d'une capacité de stockage. Les instances Amazon EC2 du type de nœud de tâches, qui ne stockent pas de données, n'ont besoin que d'une puissance de traitement. Pour connaître les consignes relatives aux instances Amazon EC2 disponibles et leur configuration, consultez Configuration des instances Amazon EC2.

Les consignes suivantes s'appliquent à la plupart des clusters Amazon EMR.

  • Il existe une limite de vCPU pour le nombre total d'instances Amazon EC2 à la demande que vous exécutez sur un compte AWS par Région AWS. Pour plus d'informations sur la limite de vCPU et sur la manière de demander une augmentation de limite pour votre compte, consultez la section Instances à la demande dans le Guide de l'utilisateur Amazon EC2 pour les instances Linux.

  • Le nœud primaire n'a généralement pas de grandes exigences en matière de calcul. Pour les clusters comportant un grand nombre de nœuds, ou pour les clusters dont les applications sont spécifiquement déployées sur le nœud primaire (JupyterHub, Hue, etc.), un nœud primaire plus grand peut être nécessaire et peut contribuer à améliorer les performances du cluster. Par exemple, envisagez d'utiliser une instance m5.xlarge pour les petits clusters (50 nœuds ou moins) et de passer à un type d'instance plus grand pour les clusters plus importants.

  • Les besoins en calcul des nœuds principaux et de tâches dépendent du type de traitement que votre application effectue. De nombreuses tâches peuvent être exécutées sur les types d'instances à usage général, qui offrent des performances équilibrées en termes d'UC, d'espace disque et d'E/S. Les clusters nécessitant des calculs intensifs peuvent bénéficier d'une exécution sur des instances à CPU intensif, qui ont proportionnellement plus de ressources CPU que de RAM. Les applications de base de données et de mise en cache en mémoire peuvent bénéficier d'une exécution sur des instances à mémoire élevée. Les applications nécessitant beaucoup de ressources CPU et réseau, telles que les applications d'analyse, NLP et de Machine Learning, peuvent bénéficier d'une exécution sur des instances de calcul en cluster, qui fournissent proportionnellement des ressources d'UC intensives et des performances réseau accrues.

  • Si des phases différentes de votre cluster ont des exigences de capacité différentes, vous pouvez commencer avec un petit nombre de nœuds principaux et augmenter ou diminuer le nombre de nœuds de tâches pour satisfaire aux exigences de capacité variables de votre flux de travail.

  • La quantité de données que vous pouvez traiter dépend de la capacité de vos nœuds principaux et de la taille de vos données en entrée, au cours du traitement et en sortie. Les ensembles de données d'entrée, intermédiaires et de sortie résident tous sur le cluster au cours du traitement.

Quand faut-il utiliser des instances Spot ?

Lorsque vous lancez un cluster dans Amazon EMR, vous pouvez choisir de lancer des instances principales, de noyau ou de tâche sur des instances Spot. Comme chaque type de groupe d'instances joue un rôle différent dans le cluster, il existe des implications du lancement de chaque type de nœud sur des instances Spot. Vous ne pouvez pas modifier l'option d'achat d'une instance lorsque le cluster est en cours d'exécution. Pour modifier un groupe d'instances à la demande en instances Spot ou inversement, vous devez suspendre le cluster et en lancer un nouveau pour les nœuds principaux et de noyau. Pour les nœuds de tâches, vous pouvez lancer un nouveau groupe d'instances de tâche ou un parc d'instances et supprimer l'ancien.

Paramètres Amazon EMR pour empêcher l'échec de tâche en raison d'une résiliation d'instance Spot de nœud de tâche

Les instances Spot étant souvent utilisées pour exécuter des nœuds de tâches, Amazon EMR dispose d'une fonctionnalité par défaut pour planifier les tâches YARN afin que les tâches en cours n'échouent pas lorsque les nœuds de tâches s'exécutant sur des instances Spot sont résiliés. Pour ce faire, Amazon EMR autorise les processus principaux d'application à s'exécuter uniquement sur les nœuds principaux. Le processus principal de l'application contrôle les tâches en cours d'exécution et doit rester actif pendant toute la durée de vie de la tâche.

Les versions 5.19.0 et ultérieures d'Amazon EMR utilisent la fonctionnalité intégrée d'étiquetage des nœuds YARN pour y parvenir. (Les versions antérieures utilisaient un correctif de code). Les propriétés des classifications de configuration yarn-site et capacity-scheduler sont configurées par défaut pour que le capacity-scheduler et le fair-scheduler de YARN bénéficient des étiquettes de nœud. Amazon EMR étiquette automatiquement les nœuds principaux avec l'étiquette CORE et définit les propriétés de sorte que les maîtres d'application soient planifiés uniquement sur les nœuds avec l'étiquette CORE. La modification manuelle des propriétés associées dans les classifications de configuration de yarn-site et de capacity-scheduler, ou directement dans les fichiers XML associés, pourrait interrompre cette fonctionnalité ou la modifier.

Amazon EMR configure par défaut les propriétés et valeurs suivantes. Faites attention lorsque vous configurez ces propriétés.

  • yarn-site (yarn-site.xml) sur tous les nœuds

    • yarn.node-labels.enabled: true

    • yarn.node-labels.am.default-node-label-expression: 'CORE'

    • yarn.node-labels.fs-store.root-dir: '/apps/yarn/nodelabels'

    • yarn.node-labels.configuration-type: 'distributed'

  • yarn-site (yarn-site.xml) sur les nœuds principaux et de noyau

    • yarn.nodemanager.node-labels.provider: 'config'

    • yarn.nodemanager.node-labels.provider.configured-node-partition: 'CORE'

  • capacity-scheduler (capacity-scheduler.xml) sur tous les nœuds

    • yarn.scheduler.capacity.root.accessible-node-labels: '*'

    • yarn.scheduler.capacity.root.accessible-node-labels.CORE.capacity: 100

    • yarn.scheduler.capacity.root.default.accessible-node-labels: '*'

    • yarn.scheduler.capacity.root.default.accessible-node-labels.CORE.capacity: 100

Note

À partir de la série Amazon EMR version 6.x, la fonction des étiquettes de nœud YARN est désactivée par défaut. Les processus principaux des applications peuvent s'exécuter à la fois sur les nœuds de noyau et sur les nœuds de tâche par défaut. Vous pouvez activer la fonction d'étiquetage des nœuds YARN en configurant les propriétés suivantes :

  • yarn.node-labels.enabled: true

  • yarn.node-labels.am.default-node-label-expression: 'CORE'

Nœud primaire sur une instance Spot

Le nœud primaire contrôle et dirige le cluster. Lorsque le cluster est arrêté, il prend fin, si bien que vous devez lancer uniquement le nœud primaire en tant qu'instance Spot si vous exécutez un cluster où un arrêt soudain est acceptable. Ce peut être le cas, si vous testez une nouvelle application, si vous avez un cluster qui conserve périodiquement des données dans un magasin externe tel qu'Amazon S3, ou si vous exécutez un cluster où le coût est plus important que l'exécution du cluster jusqu'à la fin.

Lorsque vous lancez le groupe d'instances maître en tant qu'instance Spot, le cluster ne démarre pas tant que cette demande d'instance Spot n'est pas satisfaite. Ceci doit être pris en compte lorsque vous sélectionnez votre prix Spot maximum.

Vous pouvez uniquement ajouter un nœud primaire d'instances Spot lorsque vous lancez le cluster. Vous ne pouvez pas ajouter ou supprimer des nœuds primaires d'un cluster en cours d'exécution.

En général, il suffirait d'exécuter le nœud primaire en tant qu'instance Spot si vous exécutez l'ensemble du cluster (tous les groupes d'instances) sous forme d'instances Spot.

Nœuds de noyau sur les instances Spot

Les nœuds principaux traitent les données et stockent les informations à l'aide de HDFS. La résiliation d'une instance de noyau risque la perte de données. Pour cette raison, vous devez uniquement exécuter des nœuds de noyau sur des instances Spot ou des pertes de données HDFS partielles sont tolérables.

Lorsque vous lancez le groupe d'instances principal sous forme d'instances Spot, Amazon EMR attend de pouvoir mettre en service toutes les instances principales demandées avant de lancer le groupe d'instances. En d'autres termes, si vous demandez six instances Amazon EC2 et que seules cinq sont disponibles à un prix spot maximal ou inférieur, le groupe d'instances ne sera pas lancé. Amazon EMR continue d'attendre que les six instances Amazon EC2 soient disponibles ou que vous résiliez le cluster. Vous pouvez modifier le nombre d'instances Spot dans un groupe d'instances de noyau pour ajouter de la capacité à un cluster en cours d'exécution. Pour plus d'informations sur la façon de travailler avec des groupes d'instances et comment les instances Spot fonctionnent avec des parcs d'instances, consultez : Création d'un cluster avec des parcs d'instances ou des groupes d'instances uniformes.

Nœuds de tâche sur les instances Spot

Les nœuds de tâches traitent les données, mais ne conservent pas de données persistantes dans HDFS. S'ils sont suspendus car le prix Spot a augmenté et dépasse votre prix Spot maximum, aucune donnée n'est perdue et l'effet sur votre cluster est minimal.

Lorsque vous lancez un ou plusieurs groupes d'instances de tâches sous forme d'instances Spot, Amazon EMR met en service autant de nœuds de tâches que possible à votre prix Spot maximum. Cela signifie que si vous demandez un groupe d'instances de tâches à six nœuds et que seules cinq instances Spot sont disponibles à votre prix Spot maximum ou sous ce prix, Amazon EMR lance le groupe d'instances avec cinq nœuds et ajoute le sixième plus tard, si cela est possible.

Le lancement des groupes d'instances de tâches sous forme d'instances Spot est un moyen stratégique d'étendre la capacité de votre cluster tout en réduisant au maximum les coûts. Si vous lancez vos groupes d'instances maîtres et principaux en tant qu'instances à la demande, leur capacité est garantie pour l'exécution du cluster. Vous pouvez ajouter des instances de tâches à vos groupes d'instances de tâches en fonction des besoins, afin de gérer les pics de trafic ou d'accélérer le traitement de données.

Vous pouvez ajouter ou supprimer des nœuds de tâches à l'aide de la console, de l'AWS CLI ou de l'API. Vous pouvez également ajouter des groupes de tâches supplémentaires, mais vous ne pouvez pas supprimer un groupe de tâches après sa création.

Configurations d'instances pour les scénarios d'application

Le tableau suivant est une référence rapide pour les options et configurations de types de nœuds qui sont généralement adaptés à plusieurs scénarios d'applications. Cliquez sur le lien pour afficher des informations supplémentaires sur chaque type de scénario.

Scénario d'application Option d'achat du nœud primaire Option d'achat de nœuds principaux Option d'achat de nœuds de tâches
Entrepôts des données et clusters de longue durée À la demande Combinaison d'instances à la demande ou de parc d'instances Combinaison d'instances Spot ou de parc d'instances
Charges de travail axées sur les coûts Spot Spot Spot
Charges de travail essentielles pour les données À la demande À la demande Combinaison d'instances Spot ou de parc d'instances
Tests d'application Spot Spot Spot

Il existe plusieurs scénarios dans lesquels les instances Spot sont utiles pour exécuter un cluster Amazon EMR.

Entrepôts des données et clusters de longue durée

Si vous exécutez un cluster Amazon EMR persistant qui présente une variation prévisible de sa capacité de calcul (tel qu'un entrepôt des données), vous pouvez gérer un pic de demande à moindre coût grâce aux instances Spot. Vous pouvez lancer vos groupes d'instances primaires et principales sous forme d'instances à la demande pour gérer la capacité normale et lancer le groupe d'instances de tâches sous forme d'instances Spot pour gérer les exigences des pics de charge.

Charges de travail axées sur les coûts

Si vous exécutez des clusters transitoires pour lesquels une réduction des coûts est plus importante que la durée d'exécution, et qu'une perte partielle de travail est acceptable, vous pouvez exécuter l'ensemble du cluster (groupes d'instances principales, centrales et de tâches) sous forme d'instances Spot, afin de bénéficier des plus grandes économies de coûts possibles.

Charges de travail essentielles pour les données

Si vous exécutez un cluster pour lequel le coût inférieur est plus important que le délai d'exécution, mais que la perte d'un travail partiel n'est pas acceptable, lancez les groupes d'instances principales et de noyau en tant qu'instances à la demande et complétez avec un ou plusieurs groupes d'instances de tâche des instances Spot. L'exécution des groupes d'instances principales et centrales en tant qu'instances à la demande garantit la persistance de vos données dans HDFS et la protection du cluster contre une résiliation en raison des fluctuations du marché Spot, tout en permettant de réaliser des économies qui découlent de l'exécution des groupes d'instances de tâches en tant qu'instances Spot.

Tests d'application

Lorsque vous testez une nouvelle application afin de préparer son lancement dans un environnement de production, vous pouvez exécuter l'ensemble du cluster (groupes d'instances principales, centrales et de tâches) sous forme d'instances Spot pour réduire les coûts des tests.

Calcul de la capacité HDFS requise pour un cluster

La quantité de stockage HDFS disponible pour votre cluster dépend des facteurs suivants :

  • Le nombre d'instances Amazon EC2 utilisées pour les nœuds principaux.

  • Capacité du stockage d'instances Amazon EC2 pour le type d'instance utilisé. Pour plus d'informations sur les volumes du stockage d'instances, consultez Magasin d'instances Amazon EC2 dans le Guide de l'utilisateur Amazon EC2 pour les instances Linux.

  • Nombre et taille des volumes Amazon EBS attachés aux nœud principaux.

  • Facteur de réplication, qui représente le mode de stockage de chaque bloc de données dans HDFS pour assurer une redondance similaire à RAID. Par défaut, le facteur de réplication est égal à trois pour un cluster composé de 10 nœuds principaux ou plus, à deux pour un cluster de 4 à 9 nœuds principaux, et à un pour un cluster de trois nœuds ou moins.

Pour calculer la capacité HDFS d'un cluster, pour chaque nœud principal, ajoutez la capacité du volume de stockage d'instance à la capacité de stockage Amazon EBS (le cas échéant). Multipliez le résultat par le nombre de nœuds principaux, puis divisez le total par le facteur de réplication en fonction du nombre de nœuds principaux. Par exemple, un cluster contenant 10 nœuds principaux de type i2.xlarge qui possèdent 800 Go de stockage d'instance sans volumes Amazon EBS associés dispose au total d'environ 2 666 Go disponibles pour HDFS (10 nœuds x 800 Go ÷ facteur de réplication de 3).

Si la valeur de capacité HDFS calculée est inférieure à vos données, vous pouvez augmenter la quantité de stockage HDFS de différentes manières :

  • En créant un cluster avec des volumes Amazon EBS supplémentaires, ou en ajoutant des groupes d'instances avec des volumes Amazon EBS attachés à un cluster existant

  • En ajoutant d'autres nœuds principaux

  • En choisissant un type d'instance Amazon EC2 avec une capacité de stockage supérieure

  • En utilisant la compression des données

  • En modifiant les paramètres de configuration de Hadoop pour réduire le facteur de réplication

La réduction du facteur de réplication doit être utilisée avec précautions, car elle réduit la redondance des données HDFS et l'aptitude du cluster à récupérer après la perte ou l'endommagement de blocs HDFS.