Exécuter des commandes et des scripts sur un cluster Amazon EMR - Amazon EMR

Exécuter des commandes et des scripts sur un cluster Amazon EMR

Cette rubrique explique comment exécuter une commande ou un script en tant qu'étape sur votre cluster. L'exécution d'une commande ou d'un script sous forme d'étape est l'une des nombreuses méthodes permettant de soumettre du travail à un cluster. Elle est utile dans les situations suivantes :

  • Lorsque vous n'avez pas accès SSH à votre cluster Amazon EMR

  • Lorsque vous souhaitez exécuter une commande bash ou shell pour dépanner votre cluster

Vous pouvez exécuter un script soit lorsque vous créez un cluster, soit lorsque votre cluster est dans l'état WAITING. Pour exécuter un script avant le début du traitement de l'étape, utilisez plutôt une action d'amorçage. Pour plus d'informations sur les actions de démarrage, consultez la section Création d'actions d'amorçage pour l'installation de logiciels supplémentaires dans le Guide de gestion Amazon EMR.

Amazon EMR fournit les outils suivants pour vous aider à exécuter des scripts, des commandes et d'autres programmes intégrés au cluster. Vous pouvez appeler les deux outils à l'aide de la console de gestion Amazon EMR ou de l'AWS CLI.

command-runner.jar

Situé sur l'AMI Amazon EMR de votre cluster. Vous pouvez utiliser command-runner.jar pour exécuter des commandes sur votre cluster. Vous spécifiez command-runner.jar sans utiliser son chemin complet.

script-runner.jar

Hébergé sur Amazon S3 à s3://<region>.elasticmapreduce/libs/script-runner/script-runner.jar<region> est la région dans laquelle réside votre cluster Amazon EMR. Vous pouvez utiliser script-runner.jar pour exécuter des scripts enregistrés localement ou sur Amazon S3 sur votre cluster. Vous devez spécifier l'URI complet de script-runner.jar lorsque vous soumettez une étape.

Soumettre une étape JAR personnalisée pour exécuter un script ou une commande

Les exemples AWS CLI suivants illustrent certains cas d'utilisation courants de command-runner.jar et script-runner.jar sur Amazon EMR.

Exemple : Exécution d'une commande sur un cluster à l'aide de command-runner.jar

Lorsque vous utilisez command-runner.jar, vous spécifiez des commandes, des options et des valeurs dans la liste d'arguments de votre étape.

L'exemple AWS CLI suivant soumet une étape à un cluster en cours d'exécution qui invoque command-runner.jar. La commande spécifiée dans la liste Args télécharge un script appelé my-script.sh depuis Amazon S3 dans le répertoire d'accueil de l'utilisateur hadoop. La commande modifie ensuite les autorisations du script et exécute my-script.sh.

Lorsque vous utilisez l'AWS CLI, les éléments de votre liste Args doivent être séparés par des virgules, sans espace entre les éléments de la liste. Par exemple, Args=[example-command,example-option,"example option value"] plutôt que Args=[example-command, example-option, "example option value"].

aws emr add-steps \ --cluster-id j-2AXXXXXXGAPLF \ --steps Type=CUSTOM_JAR,Name="Download a script from S3, change its permissions, and run it",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[bash,-c,"aws s3 cp s3://EXAMPLE-DOC-BUCKET/my-script.sh /home/hadoop; chmod u+x /home/hadoop/my-script.sh; cd /home/hadoop; ./my-script.sh"]
Exemple : Exécution d'un script sur un cluster à l'aide de script-runner.jar

Lorsque vous utilisez script-runner.jar, vous spécifiez le script que vous souhaitez exécuter dans la liste des arguments de votre étape.

L'exemple AWS CLI suivant soumet une étape à un cluster en cours d'exécution qui invoque script-runner.jar. Dans ce cas, le script appelé my-script.sh est stocké sur Amazon S3. Vous pouvez également spécifier des scripts locaux qui sont stockés sur le nœud principal de votre cluster.

aws emr add-steps \ --cluster-id j-2AXXXXXXGAPLF \ --steps Type=CUSTOM_JAR,Name="Run a script from S3 with script-runner.jar",ActionOnFailure=CONTINUE,Jar=s3://us-west-2.elasticmapreduce/libs/script-runner/script-runner.jar,Args=[s3://EXAMPLE-DOC-BUCKET/my-script.sh]

Autres moyens d'utiliser command-runner.jar

Vous pouvez également utiliser command-runner.jar pour soumettre du travail à un cluster à l'aide d'outils tels que spark-submit ou hadoop-streaming. Lorsque vous lancez une application à l'aide de command-runner.jar, vous spécifiez CUSTOM_JAR comme type d'étape au lieu d'utiliser une valeur telle que SPARK, STREAMING ou PIG. La disponibilité des outils varie en fonction des applications que vous avez installées sur le cluster.

L'exemple de commande suivant utilise command-runner.jar pour soumettre une étape à l'aide de spark-submit. La liste Args indique spark-submit comme commande, suivie de l'URI Amazon S3 de l'application Spark my-app.py avec des arguments et des valeurs.

aws emr add-steps \ --cluster-id j-2AXXXXXXGAPLF \ --steps Type=CUSTOM_JAR,Name="Run spark-submit using command-runner.jar",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[spark-submit,S3://DOC-EXAMPLE-BUCKET/my-app.py,ArgName1,ArgValue1,ArgName2,ArgValue2]

Le tableau suivant identifie les outils supplémentaires que vous pouvez exécuter à l'aide de command-runner.jar.

Nom de l'outil Description
hadoop-streaming Soumet un programme de streaming Hadoop. Dans la console et certains kits SDK, il s'agit d'une étape de streaming.
hive-script Exécute un script Hive. Dans la console et les kits SDK, il s'agit d'une étape Hive.
pig-script Exécute un script Pig. Dans la console et les kits SDK, il s'agit d'une étape Pig.
spark-submit

Exécute une application Spark. Dans la console, il s'agit d'une étape Spark.

hadoop-lzo Exécute l'indexeur Hadoop LZO sur un répertoire.
s3-dist-cp Effectuez la copie distribuée de grandes quantités de données d'Amazon S3 dans HDFS. Pour de plus amples informations, veuillez consulter S3DistCp (s3-dist-cp).