

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejecución de comandos y scripts en un clúster de Amazon EMR
<a name="emr-commandrunner"></a>

En este tema se explica cómo ejecutar un comando o un script como paso en el clúster. Ejecutar un comando o un script como paso es una de las muchas maneras de [enviar el trabajo a un clúster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html) y es útil en las siguientes situaciones:
+ Cuando no tiene acceso SSH a su clúster de Amazon EMR
+ Cuando desea ejecutar un comando bash o de intérprete de comandos para solucionar los problemas de su clúster

Puede ejecutar un script tanto al crear un clúster como si el clúster está en estado `WAITING`. Para ejecutar un script antes de que comience el procesamiento de un paso, utilice una acción de arranque en su lugar. Para obtener más información acerca de las acciones de arranque, consulte [Creación de acciones de arranque para instalar software adicional](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html) en la *Guía de administración de Amazon EMR*.

Amazon EMR proporciona las siguientes herramientas para ayudarle a ejecutar scripts, comandos y otros programas en el clúster. Puede invocar ambas herramientas mediante la consola de administración de Amazon EMR o la AWS CLI.

`command-runner.jar`  
Se encuentra en la AMI de Amazon EMR de su clúster. Puede utilizar `command-runner.jar` para ejecutar comandos en su clúster. Especifica `command-runner.jar` sin utilizar su ruta completa. 

`script-runner.jar`  
 Puede usar `script-runner.jar` para ejecutar scripts guardados localmente o en Amazon S3 en su clúster.   
 Para Amazon EMR 7.13 y versiones posteriores, este contenedor se encuentra en la AMI de Amazon EMR del clúster. Puede especificarlo `script-runner.jar` sin usar su URI completo.   
Para Amazon EMR 7.12 y versiones anteriores, este contenedor está alojado en Amazon S3, `s3://{{<region>}}.elasticmapreduce/libs/script-runner/script-runner.jar` donde se `{{<region>}}` encuentra la región en la que reside el clúster de Amazon EMR. Debe especificar el URI completo de `script-runner.jar` al enviar un paso. 

## Envío de un paso JAR personalizado para ejecutar un script o un comando
<a name="emr-commandrunner-examples"></a>

Los siguientes AWS CLI ejemplos ilustran algunos casos de uso comunes de `command-runner.jar` y `script-runner.jar` en Amazon EMR.

**Example : ejecutar un comando en un clúster mediante `command-runner.jar`**  
Cuando usa `command-runner.jar`, especifica comandos, opciones y valores en la lista de argumentos del paso.  
El siguiente AWS CLI ejemplo envía un paso a un clúster en ejecución que lo invoca. `command-runner.jar` El comando especificado en la `Args` lista descarga un script llamado {{my-script.sh}} desde Amazon S3 al directorio principal del usuario de hadoop. A continuación, el comando modifica los permisos del script y se ejecuta. {{my-script.sh}}  
Al usar el AWS CLI, los elementos de la `Args` lista deben estar separados por comas, sin espacios en blanco entre los elementos de la lista. Por ejemplo, `Args=[example-command,example-option,"example option value"]` en lugar de `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://amzn-s3-demo-bucket/my-script.sh}} /home/hadoop; chmod u+x /home/hadoop/my-script.sh; cd /home/hadoop; ./my-script.sh"]
```

**Example : Ejecutar un script en un clúster mediante `script-runner.jar`**  
Cuando usa `script-runner.jar`, especifica el script que desea ejecutar en la lista de argumentos de su paso.  
Los siguientes AWS CLI ejemplos envían un paso a un clúster en ejecución que lo invoca. `script-runner.jar` El script llamado {{my-script.sh}} está almacenado en Amazon S3. También puede especificar los scripts locales que se almacenan en el nodo maestro del clúster.   
 Si el clúster utiliza Amazon EMR 7.13 o una versión posterior, puede especificarlo `script-runner.jar` sin utilizar su ruta completa:   

```
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=script-runner.jar,Args=[{{s3://amzn-s3-demo-bucket/my-script.sh}}]
```
 Si el clúster utiliza Amazon EMR 7.12 o una versión anterior, debe especificar el URI completo `script-runner.jar` al enviar un paso:   

```
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://amzn-s3-demo-bucket/my-script.sh}}]
```

## Otras formas de usar `command-runner.jar`
<a name="emr-commandrunner-other-uses"></a>

También se puede utilizar `command-runner.jar` para enviar el trabajo a un clúster con herramientas como `spark-submit` o `hadoop-streaming`. Al lanzar una aplicación con `command-runner.jar`, se especifica `CUSTOM_JAR` como tipo de paso en lugar de utilizar un valor como `SPARK`, `STREAMING` o `PIG`. La disponibilidad de las herramientas varía en función de las aplicaciones que haya instalado en el clúster.

El siguiente comando de ejemplo utiliza `command-runner.jar` para enviar un paso mediante `spark-submit`. La `Args` lista se especifica `spark-submit` como comando, seguido del URI de Amazon S3 de la aplicación Spark {{my-app.py}} con argumentos y valores.

```
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://amzn-s3-demo-bucket/my-app.py}},{{ArgName1}},{{ArgValue1}},{{ArgName2}},{{ArgValue2}}]
```

En la siguiente tabla se identifican las herramientas adicionales que puede utilizar para ejecutar `command-runner.jar`.


****  

| Nombre de la herramienta | Description (Descripción) | 
| --- | --- | 
| hadoop-streaming | Envía un programa de streaming de Hadoop. En la consola y algunos SDK, este es un paso de streaming. | 
| hive-script | Ejecuta un script de Hive. En la consola y los SDK, este es un paso de Hive. | 
| pig-script | Ejecuta un script de Pig. En la consola y los SDK, este es un paso de Pig. | 
| spark-submit | Ejecuta una aplicación de Spark. En la consola, este es un paso de Spark. | 
| hadoop-lzo | Ejecuta el [indizador Hadoop LZO](https://github.com/kevinweil/hadoop-lzo/blob/master/README.md) en un directorio. | 
| s3-dist-cp | Copia distribuida de grandes cantidades de datos desde Amazon S3 en HDFS. Para obtener más información, consulte [S3 (s3-dist-cp) DistCp](UsingEMR_s3distcp.md). | 