Configuration de la journalisation et du débogage du cluster - Amazon EMR

Configuration de la journalisation et du débogage du cluster

Lorsque vous planifiez votre cluster, vous devez déterminer la quantité de support de débogage que vous souhaitez rendre disponible. Lorsque vous commencez à développer votre application de traitement des données, nous vous recommandons de tester l'application sur un cluster traitant un petit sous-ensemble représentatif de vos données. Lorsque vous procédez ainsi, il est probable que vous souhaitiez tirer parti de tous les outils de débogage que propose Amazon EMR, comme l'archivage des fichiers journaux dans Amazon S3.

Lorsque vous avez terminé la phase de développement et que votre application de traitement des données passe en production, vous pouvez décider de réduire le débogage. Vous pouvez ainsi économiser le coût de stockage des archives de fichiers journaux dans Amazon S3 et réduire la charge de traitement sur le cluster, qui n'a plus besoin d'écrire les états dans Amazon S3. En revanche, en cas de problèmes, vous aurez moins d'outils disponibles pour les traiter.

Fichiers journaux par défaut

Par défaut, chaque cluster écrit les fichiers journaux sur le nœud primaire. Ils sont écrits dans le répertoire /mnt/var/log/. Vous pouvez y accéder à l'aide de SSH pour vous connecter au nœud primaire, comme décrit dans Connexion au nœud primaire à l'aide de SSH.

Note

Si vous utilisez Amazon EMR version 6.8.0 ou antérieure, les fichiers journaux sont enregistrés sur Amazon S3 lors de la résiliation du cluster. Vous ne pouvez donc pas accéder aux fichiers journaux une fois le nœud primaire résilié. Les versions 6.9.0 et ultérieures d'Amazon EMR archivent les journaux sur Amazon S3 pendant la réduction de la taille du cluster, de sorte que les fichiers journaux générés sur le cluster persistent même après que le nœud a été résilié.

Vous n'avez pas besoin d'activer d'options pour que les fichiers journaux soient écrits sur le nœud primaire. Il s'agit en effet du comportement par défaut d'Amazon EMR et de Hadoop.

Un cluster génère plusieurs types de fichiers journaux, y compris :

  • Journaux d'étape – Ces journaux sont générés par le service Amazon EMR et contiennent des informations sur le cluster et les résultats de chaque étape. Les fichiers journaux sont stockés dans le répertoire /mnt/var/log/hadoop/steps/ sur le nœud primaire. Chaque étape enregistre ses résultats dans un sous-répertoire distinct numéroté : /mnt/var/log/hadoop/steps/s-stepId1/ pour la première étape, /mnt/var/log/hadoop/steps/s-stepId2/ pour la deuxième étape, et ainsi de suite. Les identifiants d'étape de 13 caractères (par exemple, stepId1, stepId2) sont spécifiques à un cluster.

  • Les journaux des composants Hadoop et YARN – Les journaux pour les composants associés à la fois à Apache YARN et à MapReduce, par exemple, figurent dans des dossiers distincts dans /mnt/var/log. Les emplacements des fichiers journaux pour les composants Hadoop dans /mnt/var/log sont les suivants : hadoop-hdfs, hadoop-mapreduce, hadoop-httpfs et hadoop-yarn. Le répertoire hadoop-state-pusher est utilisé pour la sortie du processus de transmission d'état Hadoop.

  • Les journaux des actions d'amorçage – Si votre travail utilise des actions d'amorçage, les résultats de ces actions sont enregistrés. Les fichiers journaux sont stockés dans /mnt/var/log/bootstrap-actions/ sur le nœud primaire. Chaque étape enregistre ses résultats dans un sous-répertoire distinct numéroté : /mnt/var/log/bootstrap-actions/1/ pour la première action d'amorçage, /mnt/var/log/bootstrap-actions/2/ pour la deuxième action d'amorçage, et ainsi de suite.

  • Les journaux d'état de l'instance – Ces journaux fournissent des informations sur l'UC, l'état de la mémoire et les threads de nettoyage de mémoire du nœud. Les fichiers journaux sont stockés dans /mnt/var/log/instance-state/ sur le nœud primaire.

Archiver les fichiers journaux sur Amazon S3

Note

Vous ne pouvez pas actuellement utiliser l'agrégation des journaux vers Amazon S3 avec l'utilitaire yarn logs.

Les versions 6.9.0 et ultérieures d'Amazon EMR archivent les journaux sur Amazon S3 pendant la réduction de la taille du cluster, de sorte que les fichiers journaux générés sur le cluster persistent même après que le nœud a été résilié. Ce comportement étant activé automatiquement, vous n'avez rien à faire pour l'activer. Pour les versions 6.8.0 et antérieures d'Amazon EMR, vous pouvez configurer un cluster pour archiver régulièrement les fichiers journaux stockés sur le nœud primaire vers Amazon S3. Vous avez ainsi la garantie que les fichiers journaux sont disponibles une fois que le cluster est résilié, qu'il s'agisse d'une fermeture normale ou d'une erreur. Amazon EMR archive les fichiers journaux sur Amazon S3 toutes les 5 minutes.

Pour que les fichiers journaux soient archivés dans Amazon S3 pour Amazon EMR versions 6.8.0 et antérieures, vous devez activer cette fonctionnalité lorsque vous lancez le cluster. Vous pouvez effectuer cette opération à l'aide de la console, de l'interface de ligne de commande ou de l'API. Par défaut, l'archivage des fichiers est activé pour les clusters lancés à l'aide de la console. Il doit être activé manuellement pour les clusters lancés dans Amazon S3 à l'aide de l'interface de ligne de commande ou de l'API.

Note

Nous avons repensé la console Amazon EMR pour la rendre plus facile à utiliser. Consultez Nouveautés de la console pour en savoir plus sur les différences entre les anciennes et les nouvelles expériences de console.

New console
Pour archiver les fichiers journaux sur Amazon S3 avec la nouvelle console
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon EMR à l'adresse https://console.aws.amazon.com/emr.

  2. Sous EMR sur EC2 dans le volet de navigation de gauche, choisissez Clusters, puis Créer un cluster.

  3. Sous Journaux du cluster, cochez la case Publier les journaux spécifiques au cluster sur Amazon S3.

  4. Dans le champ Emplacement Amazon S3, saisissez (ou naviguez jusqu'à) un chemin Amazon S3 pour stocker vos journaux. Si vous tapez le nom d'un dossier qui n'existe pas dans le compartiment S3, Amazon S3 le crée.

    Lorsque vous définissez cette valeur, Amazon EMR copie les fichiers journaux des instances EC2 du cluster sur Amazon S3. Cela évite que les fichiers journaux ne soient perdus lorsque le cluster se termine et que l'EC2 résilie les instances hébergeant le cluster. Ces journaux sont utiles à des fins de dépannage. Pour plus d'informations, consultez Affichage des fichiers journaux.

  5. Cochez éventuellement la case Chiffrer les journaux spécifiques au cluster. Sélectionnez ensuite une clé AWS KMS dans la liste, entrez un ARN de clé ou créez une nouvelle clé. Cette option n'est disponible qu'avec Amazon EMR version 5.30.0 et ultérieure, à l'exclusion de la version 6.0.0. Pour utiliser cette option, ajoutez l'autorisation à AWS KMS pour votre profil d'instance EC2 et votre rôle Amazon EMR. Pour de plus amples informations, veuillez consulter Pour chiffrer les fichiers journaux stockés dans Amazon S3 avec une clé AWS KMS gérée par le client.

  6. Choisissez toutes les autres options qui s'appliquent à votre cluster.

  7. Pour lancer votre cluster, choisissez Créer le cluster.

Old console
Pour archiver les fichiers journaux sur Amazon S3 avec l'ancienne console
  1. Accédez à la nouvelle console Amazon EMR et sélectionnez Basculer vers l'ancienne console depuis le menu latéral. Pour plus d'informations sur ce qui vous attend lorsque vous passez à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.

  2. Choisissez Create Cluster (Créer un cluster).

  3. Choisissez Accéder aux options avancées.

  4. Dans la section Options générales, dans le champ Journalisation, acceptez l'option par défaut : Activé.

    Cette option détermine si Amazon EMR capture des données de journal détaillées sur Amazon S3. Vous ne pouvez définir cette option que lors de la création du cluster. Pour de plus amples informations, veuillez consulter Afficher les fichiers journaux .

  5. Dans le champ Dossier S3, saisissez (ou naviguez jusqu'à) un chemin vers Amazon S3 pour stocker vos journaux. Vous pouvez également autoriser la console à générer automatiquement un chemin d'accès Amazon S3. Si vous tapez le nom d'un dossier qui n'existe pas dans le compartiment, il est automatiquement créé.

    Lorsque cette valeur est définie, Amazon EMR copie les fichiers journaux des instances EC2 du cluster vers Amazon S3. Cela empêche la perte des fichiers journaux lorsque le cluster prend fin et que les instances EC2 hébergeant le cluster sont arrêtées. Ces journaux sont utiles à des fins de dépannage.

    Pour plus d'informations, consultez Affichage des fichiers journaux.

  6. Dans le champ Chiffrement des journaux, sélectionnez Chiffrer les journaux stockés dans S3 avec une clé gérée par le client AWS KMS. Sélectionnez ensuite une clé AWS KMS dans la liste ou entrez un ARN de clé. Vous pouvez également créer une nouvelle clé AWS KMS.

    Cette option n'est disponible qu'avec Amazon EMR version 5.30.0 et ultérieure, à l'exclusion de la version 6.0.0. Pour utiliser cette option, ajoutez l'autorisation à AWS KMS pour votre profil d'instance EC2 et votre rôle Amazon EMR. Pour de plus amples informations, veuillez consulter Pour chiffrer les fichiers journaux stockés dans Amazon S3 avec une clé AWS KMS gérée par le client.

  7. Procédez à la création du cluster, comme décrit dans Planification et configuration des clusters.

CLI
Pour archiver des fichiers journaux sur Amazon S3 à l'aide de l'AWS CLI

Pour archiver les fichiers journaux dans Amazon S3 à l'aide de l'AWS CLI, tapez la commande create-cluster et spécifiez le chemin d'accès au journal Amazon S3 à l'aide du paramètre --log-uri.

  1. Pour enregistrer des fichiers dans Amazon S3 tapez la commande suivante et remplacez myKey par le nom de votre paire de clés EC2.

    aws emr create-cluster --name "Test cluster" --release-label emr-5.36.1 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre --instance-groups, un seul nœud primaire est lancé et les instances restantes sont lancées en tant que nœuds principaux. Tous les nœuds utiliseront le type d'instance spécifié dans la commande.

    Note

    Si vous n'avez pas encore créé le rôle de service Amazon EMR par défaut et le profil d'instance EC2, saisissez aws emr create-default-roles pour les créer avant de taper la sous-commande create-cluster.

Pour chiffrer les fichiers journaux stockés dans Amazon S3 avec une clé AWS KMS gérée par le client

Avec Amazon EMR version 5.30.0 et suivantes (sauf Amazon EMR 6.0.0), vous pouvez chiffrer les journaux stockés dans Amazon S3 avec une clé gérée par le client AWS KMS. Pour activer cette option dans la console, suivez les étapes de la section Archiver les fichiers journaux sur Amazon S3. Votre profil d'instance Amazon EC2 et votre rôle Amazon EMR doivent répondre aux conditions préalables suivantes :

  • Le profil d'instance Amazon EC2 utilisé pour votre cluster doit être autorisé à utiliser kms:GenerateDataKey.

  • Le rôle Amazon EMR utilisé pour votre cluster doit avoir l'autorisation d'utiliser kms:DescribeKey.

  • Le profil d'instance Amazon EC2 et le rôle Amazon EMR doivent être ajoutés à la liste des utilisateurs clés pour la clé gérée par le client AWS KMS spécifiée, comme le démontrent les étapes suivantes :

    1. Ouvrez la console AWS Key Management Service (AWS KMS) à l'adresse https://console.aws.amazon.com/kms.

    2. Pour changer de région AWS, utilisez le Region selector (Sélecteur de région) dans l'angle supérieur droit de la page.

    3. Sélectionnez l'alias de la clé KMS à modifier.

    4. Sur la page de détails de la clé, sous Key Users (Utilisateurs de clés), choisissez Add (Ajouter).

    5. Dans la boîte de dialogue Ajouter des utilisateurs clés, sélectionnez votre profil d'instance Amazon EC2 et votre rôle Amazon EMR.

    6. Choisissez Ajouter.

Pour plus d'informations, consultez Fonctions du service IAM utilisées par Amazon EMR, et Utilisation des stratégies de clé dans le guide du développeur AWS Key Management Service.

Pour regrouper les journaux dans Amazon S3 à l'aide du fichier de configuration AWS CLI.

Note

Actuellement, vous ne pouvez pas utiliser l'agrégation des journaux avec l'utilitaire yarn logs. Vous pouvez uniquement utiliser l'agrégation prise en charge par cette procédure.

L'agrégation de journaux (Hadoop 2.x) compile les journaux de tous les conteneurs d'une application individuelle en un seul fichier. Pour activer l'agrégation des journaux dans Amazon S3 à l'aide de l'AWS CLI, vous utilisez une action d'amorçage lors du lancement du cluster pour activer l'agrégation des journaux et spécifier le compartiment dans lequel stocker les journaux.

  • Pour activer le regroupement des journaux, créez le fichier de configuration suivant, appelé myConfig.json, qui contient les éléments suivants :

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/DOC-EXAMPLE-BUCKET\/logs" } } ]

    Tapez la commande suivante et remplacez myKey par le nom de votre paire de clés EC2. Vous pouvez également remplacer n'importe quel texte rouge par vos propres configurations.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 \ --applications Name=Hadoop \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3 \ --configurations file://./myConfig.json

    Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre --instance-groups, un seul nœud primaire est lancé et les instances restantes sont lancées en tant que nœuds principaux. Tous les nœuds utiliseront le type d'instance spécifié dans la commande.

    Note

    Si vous n'avez pas encore créé le rôle de service EMR et le profil d'instance EC2 par défaut, exécutez aws emr create-default-roles pour les créer avant d'exécuter la sous-commande create-cluster.

Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans le fichier AWS CLI, consultez Référence des commandes AWS CLI.

Emplacements des journaux

La liste suivante inclut tous les types de journaux et leur emplacement dans Amazon S3. Vous pouvez les utiliser pour résoudre les problèmes liés à Amazon EMR.

Journaux d'étapes

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

Journaux d'application

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

Cet emplacement inclut le conteneur stderr et stdout, directory.info, prelaunch.out, et les journaux launch_container.sh.

Journaux du gestionnaire de ressources

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

Hadoop HDFS

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

Cet emplacement inclut les journaux NameNode, DataNode et YARN TimelineServer.

Journaux du gestionnaire de nœuds

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

Journaux d'état de l'instance

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Journaux de provisionnement d'Amazon EMR

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Journaux de la ruche

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • Pour trouver les journaux Hive sur votre cluster, supprimez l'astérisque (*) et ajoutez /var/log/hive/ au lien ci-dessus.

  • Pour trouver les journaux HiveServer2, supprimez l'astérisque (*) et ajoutez var/log/hive/hiveserver2.log au lien ci-dessus.

  • Pour trouver les journaux HiveCLI, supprimez l'astérisque (*) et ajoutez /var/log/hive/user/hadoop/hive.log au lien ci-dessus.

  • Pour trouver les journaux Hive Metastore Server, supprimez l'astérisque (*) et ajoutez /var/log/hive/user/hive/hive.log au lien ci-dessus.

Si votre échec se situe dans le nœud principal ou le nœud de tâche de votre application Tez, fournissez les journaux du conteneur Hadoop approprié.

Activation de l'outil de débogage

L'outil de débogage vous permet d'explorer plus facilement les fichiers journaux depuis la console Amazon EMR. Pour de plus amples informations, veuillez consulter Afficher des fichiers journaux dans l'outil de débogage. Lorsque vous activez le débogage dans un cluster, Amazon EMR archive les fichiers journaux dans Amazon S3, puis les indexe. Vous pouvez ensuite utiliser la console pour rechercher les journaux des étapes, travaux, tâches et tentatives de tâches du cluster de manière intuitive.

Pour pouvoir utiliser l'outil de débogage dans la console Amazon EMR, vous devez activer le débogage lorsque vous lancez le cluster à l'aide de la console, de l'interface de ligne de commande ou de l'API. Notez que la nouvelle console Amazon EMR ne propose pas d'outil de débogage.

Old console
Pour activer l'outil de débogage avec l'ancienne console
  1. Accédez à la nouvelle console Amazon EMR et sélectionnez Basculer vers l'ancienne console depuis le menu latéral. Pour plus d'informations sur ce qui vous attend lorsque vous passez à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.

  2. Choisissez Create Cluster (Créer un cluster).

  3. Choisissez Accéder aux options avancées.

  4. Dans la section Cluster Configuration (Configuration de cluster), dans le champ Logging (Journalisation), choisissez Activé. Vous ne pouvez pas activer le débogage sans activer la journalisation.

  5. Dans le champ Emplacement S3 du dossier des journaux, saisissez un chemin Amazon S3 pour stocker vos journaux.

  6. Dans le champ Debugging (Débogage), choisissez Activé. L'option de débogage crée un échange Amazon SQS pour publier les messages de débogage dans le backend de service Amazon EMR. Des frais peuvent s'appliquent à la publication de messages. Pour plus d'informations, consultez la page produit Amazon SQS.

  7. Procédez à la création du cluster, comme décrit dans Planification et configuration des clusters.

AWS CLI
Pour activer l'outil de débogage à l'aide de l'AWS CLI

Pour activer le débogage à l'aide de l'AWS CLI, tapez la sous-commande create-cluster avec le paramètre --enable-debugging. Vous devez également spécifier le paramètre --log-uri lorsque vous activez le débogage.

  • Pour activer le débogage à l'aide de l'AWS CLI, saisissez la commande suivante et remplacez myKey par le nom de votre paire de clés EC2.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 \ --log-uri s3://DOC-EXAMPLE-BUCKET/logs \ --enable-debugging \ --applications Name=Hadoop Name=Hive Name=Pig \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3

    Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre --instance-groups, un seul nœud primaire est lancé et les instances restantes sont lancées en tant que nœuds principaux. Tous les nœuds utiliseront le type d'instance spécifié dans la commande.

    Note

    Si vous n'avez pas encore créé le rôle de service EMR par défaut et le profil d'instance EC2, tapez aws emr create-default-roles pour les créer avant de taper la sous-commande create-cluster.

API
Pour activer l'outil de débogage avec l'API Amazon EMR
  • Activez le débogage à l'aide de la configuration du SDK Java suivante.

    StepFactory stepFactory = new StepFactory(); StepConfig enabledebugging = new StepConfig() .withName("Enable debugging") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newEnableDebuggingStep());

    Dans cet exemple, new StepFactory() utilise us-east-1 comme région par défaut. Si votre cluster est lancé dans une autre région, vous devez spécifier la région à l'aide de new StepFactory("region.elasticmapreduce"), par exemple new StepFactory("ap-northeast-2.elasticmapreduce").

Informations relatives aux options de débogage

Les versions 4.1.0 à 5.27.0 d'Amazon EMR prennent en charge le débogage dans toutes les régions. Les autres versions d'Amazon EMR ne prennent pas en charge l'option de débogage. À compter du 23 janvier 2023, Amazon EMR arrêtera l'outil de débogage pour toutes les versions.

Amazon EMR crée une file d'attente Amazon SQS pour traiter les données de débogage. Des frais peuvent être facturés pour les messages. Cependant, Amazon SQS propose une offre gratuite pour 1 000 000 demandes maximum. Pour de plus amples informations, veuillez consulter https://aws.amazon.com/https://aws.amazon.com/sqs.

Le débogage nécessite l'utilisation de rôles. Votre profil d'instance et votre rôle de service doivent vous permettre d'utiliser toutes les opérations d'API Amazon SQS. Si vos rôles sont liés aux stratégies gérées par Amazon EMR, vous n'avez pas besoin de faire quoi que ce soit pour modifier vos rôles. Si vous disposez de rôles personnalisés, vous devez ajouter des autorisations sqs:*. Pour de plus amples informations, veuillez consulter Configuration des rôles de service IAM pour les autorisations Amazon EMR aux services et ressources AWS..