Eseguire comandi e script su un cluster Amazon EMR - Amazon EMR

Eseguire comandi e script su un cluster Amazon EMR

In questo argomento viene illustrato come eseguire un comando o uno script come fase del cluster. L'esecuzione di un comando o di uno script come fase è uno dei molti modi che puoi Invia lavoro a un cluster ed è utile nelle seguenti situazioni:

  • Quando non hai accesso SSH al tuo cluster Amazon EMR

  • Quando si desidera eseguire un comando bash o shell per risolvere i problemi del cluster

Puoi eseguire uno script sia quando crei un cluster che quando lo stato del cluster è WAITING. Per eseguire uno script prima dell'inizio dell'elaborazione delle fasi, utilizza invece un'operazione di bootstrap. Per ulteriori informazioni, consulta Creazione di operazioni di bootstrap per l'installazione di software aggiuntivo nella Guida alla gestione di Amazon EMR.

Amazon EMR fornisce i seguenti strumenti per aiutarti a eseguire script, comandi e altri programmi in cluster. Puoi richiamare entrambi gli strumenti utilizzando la console di gestione Amazon EMR o la AWS CLI.

command-runner.jar

Situato sull'AMI Amazon EMR per il tuo cluster. Puoi utilizzare command-runner.jar per eseguire comandi sul cluster. Specificare command-runner.jar senza utilizzare il suo percorso completo.

script-runner.jar

Ospitato su Amazon S3 a s3://<region>.elasticmapreduce/libs/script-runner/script-runner.jar dove <region> è la Regione in cui risiede il cluster Amazon EMR. Puoi utilizzare script-runner.jar per eseguire script salvati localmente o su Amazon S3 sul cluster. Devi specificare l'URI completo di script-runner.jar quando invii un passaggio.

Invia un passaggio JAR personalizzato per l'esecuzione di uno script o di un comando

I seguenti esempi AWS CLI illustrano alcuni casi d'uso comuni di command-runner.jar e script-runner.jar su Amazon EMR.

Esempio : esecuzione di un comando su un cluster utilizzando command-runner.jar

Quando si utilizza command-runner.jar, si specificano comandi, opzioni e valori nell'elenco degli argomenti del passaggio.

Il seguente esempio AWS CLI invia un passaggio a un cluster in esecuzione che invoca command-runner.jar. Il comando specificato nell'elenco Args scarica uno script chiamato my-script.sh da Amazon S3 nella home directory dell'utente hadoop. Il comando modifica quindi le autorizzazioni dello script e viene eseguitomy-script.sh.

Quando si utilizza la AWS CLI, gli elementi nel tuo elenco Args deve essere separato da virgole senza spazi bianchi tra gli elementi dell'elenco. Ad esempio, Args=[example-command,example-option,"example option value"] anziché 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"]
Esempio : esecuzione di uno script su un cluster utilizzando script-runner.jar

Quando si utilizza script-runner.jar, si specifica lo script che si desidera eseguire nell'elenco degli argomenti del passaggio.

Il seguente esempio AWS CLI invia un passaggio a un cluster in esecuzione che invoca script-runner.jar. In questo caso, lo script denominato my-script.sh è archiviato su Amazon S3. È possibile specificare anche script locali archiviati nel nodo principale del 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]

Altri modi per utilizzare command-runner.jar

È possibile utilizzare anche command-runner.jar per inviare lavori a un cluster con strumenti come spark-submit o hadoop-streaming. Quando si avvia un'applicazione utilizzando command-runner.jar, specifichi CUSTOM_JAR come tipo di passaggio invece di utilizzare un valore come SPARK, STREAMING, oppure PIG. La disponibilità degli strumenti varia a seconda delle applicazioni installate sul cluster.

Il seguente comando di esempio utilizza command-runner.jar per inviare un passaggio utilizzando spark-submit. L'elenco Args specifica spark-submit come comando, seguito dall'URI Amazon S3 dell'applicazione Spark my-app.py con argomenti e valori.

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]

La tabella seguente identifica gli strumenti aggiuntivi che è possibile eseguire utilizzando command-runner.jar.

Nome dello strumento Descrizione
hadoop-streaming Invia un programma di streaming Hadoop. Nella console e in alcuni SDK, questa è una fase di streaming.
hive-script Esegue uno script Hive. Nella console e negli SDK, questa è una fase Hive.
pig-script Esegue uno script Pig. Nella console e negli SDK, questa è una fase Pig.
spark-submit

Esegue un'applicazione Spark. Nella console, questa è una fase Spark.

hadoop-lzo Esegue l'indicizzatore Hadoop LZO su una directory.
s3-dist-cp Copia distribuita di grandi quantità di dati da Amazon S3 in HDFS. Per ulteriori informazioni, consulta S3DistCp (s3-dist-cp).