Créer des actions d'amorçage pour installer des logiciels supplémentaires - 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.

Créer des actions d'amorçage pour installer des logiciels supplémentaires

Vous pouvez utiliser une action d'amorçage pour installer un logiciel supplémentaire ou personnaliser la configuration des instances de cluster. Les actions d'amorçage sont des scripts qui s'exécutent sur le cluster après le lancement de l'instance par Amazon (Amazon Machine Image AMI Linux. Les actions d'amorçage s'exécutent avant qu'Amazon EMR n'installe les applications que vous spécifiez lors de la création du cluster et avant que les nœuds de cluster ne commencent le traitement des données. Si vous ajoutez des nœuds à un cluster en cours d'exécution, des actions d'amorçage s'exécutent également sur ces nœuds de la même façon. Vous pouvez créer des actions amorçage personnalisées et les spécifier quand vous créez votre cluster.

La plupart des actions d'amorçage prédéfinies pour l'AMI Amazon EMR versions 2.x et 3.x ne sont pas prises en charge dans Amazon EMR versions 4.x. Par exemple,configure-Hadoopetconfigure-daemonsne sont pas pris en charge dans Amazon EMR version 4.x. Amazon EMR version 4.x fournit plutôt cette fonctionnalité à l'origine. Pour plus d'informations sur la migration des actions d'amorçage des versions AMI Amazon EMR versions 2.x et 3.x vers Amazon EMR version 4.x, accédez àPersonnalisation de la configuration des clusters et des applications avec des versions AMI antérieures d'Amazon EMRdans le guide de version Amazon EMR.

Principes de base de l'action d'amorçage

Les actions d'amorçage s'exécutent en tant qu'utilisateur Hadoop par défaut. Vous pouvez exécuter une action d'amorçage avec des privilèges racine en utilisant sudo.

Toutes les interfaces de gestion Amazon EMR prennent en charge des actions d'amorçage. Vous pouvez spécifier jusqu'à 16 actions d'amorçage par cluster en fournissant plusieurs paramètres bootstrap-actions depuis la console, l'AWS CLI ou l'API.

A partir de la console Amazon EMR, vous pouvez en option spécifier une action d'amorçage lors de la création d'un cluster.

Lorsque vous utilisez l'interface de ligne de commande, vous pouvez transmettre des références à des scripts d'action d'amorçage à Amazon EMR en ajoutant le--bootstrap-actionslorsque vous créez le cluster à l'aide du paramètrecreate-clustercommande. La syntaxe pour un paramètre --bootstrap-actions est la suivante :

AWS CLI

--bootstrap-actions Path="s3://mybucket/filename",Args=[arg1,arg2]

Si l'action d'amorçage renvoie un code d'erreur différent de zéro, Amazon EMR le traite comme un échec et résilie l'instance. Si un trop grand nombre d'instances ne réussissent pas leurs actions d'amorçage, Amazon EMR arrête le cluster. Si seules quelques instances échouent, Amazon EMR tente de réaffecter les instances ayant échoués et continue. Utilisez le code d'erreur lastStateChangeReason du cluster pour identifier les échecs dus à une action d'amorçage.

Exécuter conditionnellement une action d'amorçage

Afin d'exécuter uniquement des actions d'amorçage sur le nœud maître, vous pouvez utiliser une action d'amorçage personnalisée avec une logique pour déterminer si le nœud est maître.

#!/bin/bash if grep isMaster /mnt/var/lib/info/instance.json | grep false; then echo "This is not master node, do nothing,exiting" exit 0 fi echo "This is master, continuing to execute script" # continue with code logic for master node below

La sortie suivante sera imprimée à partir d'un nœud principal.

This is not master node, do nothing, exiting

La sortie suivante sera imprimée à partir du nœud maître.

This is master, continuing to execute script

Pour utiliser cette logique, téléchargez votre action d'amorçage, y compris le code ci-dessus, dans votre compartiment Amazon S3. Dans la pageAWS CLI, ajoutez le--bootstrap-actionsparamètre pour le paramètreaws emr create-clusterAppelez l'API et spécifiez l'emplacement de votre script d'amorçage comme valeur dePath.

Actions d'arrêt

Un script d'action d'amorçage peut créer une ou plusieurs actions de fin de tâche en écrivant des scripts dans le répertoire /mnt/var/lib/instance-controller/public/shutdown-actions/. Lorsqu'un cluster est arrêté, tous les scripts dans ce répertoire sont exécutés en parallèle. Chaque script doit s'exécuter et s'arrêter dans un délai de 60 secondes.

L'exécution des scripts d'action d'arrêt n'est pas garantie si le nœud s'arrête avec une erreur.

Note

Lorsque vous utilisez Amazon EMR versions 4.0 et ultérieures, vous devez créer manuellement le/mnt/var/lib/instance-controller/public/shutdown-actions/répertoire sur le nœud principal. Ce répertoire n'existe pas par défaut. Toutefois, après avoir été créés, les scripts de ce répertoire s'exécutent néanmoins avant l'arrêt. Pour plus d'informations sur la connexion au nœud principal pour créer des répertoires, consultez Connect au nœud maître à l'aide de SSH.

Utiliser des actions d'amorçage personnalisées

Vous pouvez créer un script personnalisé pour effectuer une action personnalisée d'amorçage. Toutes les interfaces Amazon EMR peuvent faire référence à une action d'amorçage personnalisée.

Note

Pour obtenir les meilleures performances, nous vous recommandons de stocker des actions d'amorçage personnalisées, des scripts et d'autres fichiers que vous souhaitez utiliser avec Amazon EMR dans un compartiment Amazon S3 qui se trouve dans le même compartiment Amazon S3Région AWScomme cluster.

Ajoutez des actions d'amorçage personnalisées à l'aide de la commandeAWS CLIou l'interface de ligne de commande Amazon EMR

L'exemple suivant utilise un script d'action d'amorçage pour télécharger et extraire une archive TAR compressée depuis Amazon S3. L'exemple de script est stocké danshttps://elasticmapreduce.s3.amazonaws.com/bootstrap-actions/download.sh.

L'exemple de script ressemble à ce qui suit :

#!/bin/bash set -e wget -S -T 10 -t 5 http://elasticmapreduce.s3.amazonaws.com/bootstrap-actions/file.tar.gz mkdir -p /home/hadoop/contents tar -xzf file.tar.gz -C /home/hadoop/contents

Pour créer un cluster avec une action d'amorçage personnalisée à l'aide de l'AWS CLI

Lors de l'utilisation de l'AWS CLI pour inclure une action d'amorçage, spécifiez Path et Args en tant que liste séparée par des virgules. L'exemple suivant n'utilise pas une liste d'arguments.

  • Pour lancer un cluster avec une action d'amorçage personnalisée, saisissez la commande suivante, en remplaçantMyKeyavec le nom de votre key pair EC2. Inclure--bootstrap-actionsen tant que paramètre et spécifiez l'emplacement de votre script d'amorçage comme valeur dePath.

    • Utilisateurs Linux, UNIX et Mac OS X :

      aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    • Utilisateurs Windows :

      aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --use-default-roles --ec2-attributes KeyName=myKey --applications Name=Hive Name=Pig --instance-count 3 --instance-type m5.xlarge --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"

    Lorsque vous spécifiez le nombre d'instances sans utiliser le paramètre --instance-groups, un seul nœud principal 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, tapezaws emr create-default-rolespour les créer avant de taper lecreate-clustersous-commandes.

    Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans l'AWS CLI, voirhttps://docs.aws.amazon.com/cli/latest/reference/emr.

Ajouter des actions d'amorçage personnalisées à l'aide de la console

La procédure suivante décrit comment utiliser votre propre action d'amorçage personnalisée.

Pour créer un cluster avec une action d'amorçage personnalisée à l'aide de la console

  1. Ouvrez la console Amazon EMR à l'adressehttps://console.aws.amazon.com/elasticmapreduce/.

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

  3. Cliquez sur Accéder aux options avancées.

  4. Dans Créer un cluster - Options avancées, Étapes 1 et 2, choisissez les options que vous souhaitez, puis passez àÉtape 3 : Paramètres généraux de cluster.

  5. Sous Bootstrap Actions (Actions d'amorçage) sélectionnez Configure and add (Configurer et ajouter) pour spécifier le nom, l'emplacement du JAR et les arguments pour votre action d'amorçage. Choisissez Add (Ajouter).

  6. Vous pouvez en option ajouter des actions d'amorçage comme vous le souhaitez.

  7. Procédez à la création du cluster. Vos actions d'amorçage seront effectuées une fois que le cluster a été mis en service et initialisé.

Lorsque le nœud principal du cluster est en cours d'exécution, vous pouvez vous connecter au nœud principal et voir les fichiers journaux que le script d'action d'amorçage a généré dans le répertoire /mnt/var/log/bootstrap-actions/1.

Rubriques en relation

Utilisez une action d'amorçage personnalisée pour copier un objet depuis Amazon S3 vers chaque nœud.

Vous pouvez utiliser une action d'amorçage pour copier des objets depuis Amazon S3 vers chaque nœud d'un cluster avant que vos applications ne soient installées. L'AWS CLI est installée sur chaque nœud d'un cluster et, par conséquent, votre action d'amorçage peut appeler les commandes de l'AWS CLI.

L'exemple suivant illustre un simple script d'action d'amorçage qui copie un fichier,myfile.jar, depuis Amazon S3 vers un dossier local,/mnt1/myfolder, sur chaque nœud de cluster. Le script est enregistré sur Amazon S3 avec le nom de fichiercopymyfile.shavec le contenu suivant.

#!/bin/bash aws s3 cp s3://mybucket/myfilefolder/myfile.jar /mnt1/myfolder

Lorsque vous lancez le cluster, vous spécifiez le script. L'exemple d'AWS CLI suivant illustre ce scénario :

aws emr create-cluster --name "Test cluster" --release-label emr-5.36.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://mybucket/myscriptfolder/copymyfile.sh"