

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.

# Crear o ejecutar una aplicación de Hadoop
<a name="emr-hadoop-application"></a>

**Topics**
+ [Creación de binarios con Amazon EMR](emr-build-binaries.md)
+ [Procesamiento de datos con streaming](UseCase_Streaming.md)
+ [Procesamiento de datos con un JAR personalizado](UseCase_CustomJar.md)

# Creación de binarios con Amazon EMR
<a name="emr-build-binaries"></a>

Puede utilizar Amazon EMR como un entorno de compilación para compilar programas para su uso en el clúster. Los programas que utilice con Amazon EMR deben compilarse en un sistema que ejecute la misma versión de Linux que utiliza Amazon EMR. Para una versión de 32 bits, debería haber compilado en una máquina de 32 bits o con las opciones de compilación cruzada de 32 bits activadas. Para una versión de 64 bits, tiene que haber compilado en una máquina de 64 bits o con las opciones de compilación cruzada de 64 bits activadas. Para más información sobre las versiones de instancias de EC2, consulte [Planificar y configurar instancias de EC2](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ec2-instances.html) en la *Guía de administración de Amazon EMR*. Entre los lenguajes de programación admitidos se encuentran C\$1\$1, Python y C\$1. 

En la siguiente tabla se describen los pasos necesarios para crear y probar su aplicación mediante Amazon EMR.


**Proceso de creación de un módulo**  

|  |  | 
| --- |--- |
|  1 |  Conecte al nodo principal en su clúster. | 
|  2  |  Copie los archivos de origen al nodo principal. | 
|  3  |  Cree binarios con las optimizaciones necesarias. | 
|  4 |  Copie binarios desde el nodo maestro a Amazon S3. | 

Los detalles de cada uno de estos pasos se tratan en las siguientes secciones. 

**Para conectar al nodo principal del clúster**
+ Siga las instrucciones de [Conexión al nodo maestro mediante SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) en la *Guía de administración de Amazon EMR*.

**Para copiar archivos de origen al nodo principal**

1. Ponga sus archivos de origen en un bucket de Amazon S3. Para obtener información acerca de cómo crear buckets y cómo transferir datos a Amazon S3, consulte la [Guía del usuario de Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

1. Cree una carpeta en su clúster de Hadoop para los archivos de origen introduciendo un comando similar al siguiente:

   ```
   mkdir SourceFiles
   ```

1. Copie sus archivos de origen de Amazon S3 al nodo maestro escribiendo un comando similar al siguiente:

   ```
   hadoop fs -get s3://amzn-s3-demo-bucket/SourceFiles SourceFiles
   ```

**Cree binarios con las optimizaciones necesarias**  
La forma de crear sus binarios depende de muchos factores. Siga las instrucciones de sus herramientas de compilación específicas para establecer y configurar su entorno. Puede utilizar comandos de especificaciones del sistema de Hadoop para obtener información de clústeres para determinar cómo instalar el entorno de compilación.

**Para identificar las especificaciones del sistema**
+ Utilice los siguientes comandos para comprobar la arquitectura que está utilizando para crear sus binarios.

  1. Para ver la versión de Debian, escriba el siguiente comando:

     ```
     master$ cat /etc/issue
     ```

     El resultado tiene un aspecto similar al siguiente.

     ```
     Debian GNU/Linux 5.0
     ```

  1. Para ver el nombre de DNS pública y el tamaño de procesador, escriba el siguiente comando:

     ```
     master$ uname -a
     ```

     El resultado tiene un aspecto similar al siguiente.

     ```
     Linux domU-12-31-39-17-29-39.compute-1.internal 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 GNU/Linux
     ```

  1. Para ver la velocidad del procesador, escriba el siguiente comando:

     ```
     master$ cat /proc/cpuinfo
     ```

     El resultado tiene un aspecto similar al siguiente.

     ```
     processor : 0
     vendor_id : GenuineIntel
     model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
     flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr cda lahf_lm
     ...
     ```

Una vez que se hayan creado binarios, podrá copiar los archivos en Amazon S3.

**Para copiar binarios desde el nodo maestro a Amazon S3**
+ Escriba el siguiente comando para copiar los binarios a su bucket de Amazon S3:

  ```
  hadoop fs -put BinaryFiles s3://amzn-s3-demo-bucket/BinaryDestination
  ```

# Procesamiento de datos con streaming
<a name="UseCase_Streaming"></a>

La transmisión de Hadoop es una utilidad que viene con Hadoop y que permite desarrollar ejecutables en lenguajes distintos de Java. MapReduce El streaming se implementa en forma de un archivo JAR, por lo que puede ejecutarlo desde la API de Amazon EMR o la línea de comando como un archivo JAR estándar. 

En esta sección se describe cómo utilizar el streaming con Amazon EMR. 

**nota**  
El streaming de Apache Hadoop es una herramienta independiente. Por tanto, todas las funciones y parámetros no se describen aquí. [Para obtener más información sobre la transmisión de Hadoop, visite http://hadoop.apache. org/docs/stable/hadoop-streaming/HadoopStreaming.html.](http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html)

## Uso de la utilidad de streaming de Hadoop
<a name="HadoopStreamCommands"></a>

Esta sección describe cómo utilizar la utilidad de streaming de Hadoop.


**Proceso de Hadoop**  

|  |  | 
| --- |--- |
| 1 |  Escriba su ejecutable de mapeador y reductor en el lenguaje de programación que desee. Siga las instrucciones de la documentación de Hadoop para escribir sus ejecutables de streaming. Los programas deben leer su entrada a partir de los datos de entrada y salida estándar a través de la salida estándar. De forma predeterminada, cada línea de entrada/salida representa un registro y la primera pestaña de cada línea se utiliza como separador entre la clave y el valor.  | 
| 2 |  Pruebe sus ejecutables localmente y cárguelos en Amazon S3.  | 
| 3 |  Utilice la interfaz de línea de comandos de Amazon EMR o la consola de Amazon EMR para ejecutar su aplicación.  | 

Cada script de mapeador se lanza como proceso independiente en el clúster. Cada ejecutable del reductor convierte la salida del ejecutable del mapeador en la salida de datos del flujo de trabajo.

La mayoría de las aplicaciones de streaming requieren los parámetros `input`, `output`, `mapper` y `reducer`. En la siguiente tabla se describen estos y otros parámetros opcionales.


| Parámetro | Description (Descripción) | Obligatorio | 
| --- | --- | --- | 
| -input |  Ubicación de los datos de entrada en Amazon S3. Tipo: cadena Valor predeterminado: None Restricción: URI. Si no se especifica ningún protocolo, utiliza el sistema de archivos predeterminado del clúster.   | Sí | 
| -output |  Ubicación en Amazon S3 donde Amazon EMR carga los datos procesados. Tipo: cadena Valor predeterminado: None Restricción: URI Valor predeterminado: si no se especifica una ubicación, Amazon EMR carga los datos en la ubicación especificada por `input`.  | Sí | 
| -mapper |  Nombre del ejecutable del mapeador. Tipo: cadena Valor predeterminado: None  | Sí | 
| -reducer |  Nombre del ejecutable del reductor. Tipo: cadena Valor predeterminado: None  | Sí | 
| -cacheFile |  Una ubicación de Amazon S3 que contiene archivos que Hadoop copia en su directorio de trabajo local (principalmente para mejorar el rendimiento). Tipo: cadena Valor predeterminado: None Restricciones: [URI] \$1 [nombre de symlink que crear en el directorio de trabajo]   | No | 
| -cacheArchive |  Archivo JAR que extraer en el directorio de trabajo Tipo: cadena Valor predeterminado: None Restricciones: [URI] \$1 [nombre de directorio de symlink que crear en el directorio de trabajo]   | No | 
| -combiner |  Combina resultados Tipo: cadena Valor predeterminado: None Limitaciones: nombre de clase Java  | No | 

El siguiente ejemplo de código es un ejecutable de mapeador escrito en Python. Este script forma parte de la aplicación de WordCount ejemplo.

```
 1. #!/usr/bin/python
 2. import sys
 3. 
 4. def main(argv):
 5.   line = sys.stdin.readline()
 6.   try:
 7.     while line:
 8.       line = line.rstrip()
 9.       words = line.split()
10.       for word in words:
11.         print "LongValueSum:" + word + "\t" + "1"
12.       line = sys.stdin.readline()
13.   except "end of file":
14.     return None
15. if __name__ == "__main__":
16.   main(sys.argv)
```

# Enviar un paso de streaming
<a name="CLI_CreateStreaming"></a>

En esta sección se describen los conceptos básicos de enviar un paso de streaming a un clúster. Una aplicación de streaming lee entradas desde la entrada estándar y, a continuación, ejecuta un script o ejecutable (denominado asignador) en contraste con cada entrada. El resultado de cada una de las entradas se guarda a nivel local, normalmente en una partición de Hadoop Distributed File System (HDFS). Después de que el mapeador procese todas las entradas, un segundo script o ejecutable (denominado reductor) procesa los resultados del mapeador. Los resultados del reductor se envían a la salida estándar. Puede encadenar conjuntamente una serie de pasos de streaming, donde la salida de un paso se convierte en la entrada de otro. 

Se puede hacer referencia al mapeador y al reductor como un archivo o puede proporcionar una clase Java. Puede implementar el mapeador y reductor en cualquiera de los lenguajes admitidos, incluidos Ruby, Perl, Python, PHP o Bash.

## Enviar un paso de streaming mediante la consola
<a name="emr-dev-create-stream-console"></a>

En este ejemplo se describe cómo utilizar la consola de Amazon EMR para enviar un paso de streaming a un clúster en ejecución.

**Para enviar un paso de streaming**

1. [Abra la consola Amazon EMR en https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. En la **Cluster List (Lista de clústeres)**, seleccione el nombre del clúster.

1. Desplácese hasta la sección **Steps (Pasos)** y amplíela; a continuación, elija **Add step (Añadir paso)**.

1. En el cuadro de diálogo **Add Step (Añadir paso)**:
   + En **Step type (Tipo de paso)**, elija **Streaming program (Programa de streaming)**.
   + En **Name (Nombre)**, acepte el nombre predeterminado, Streaming program (Programa de streaming), o escriba un nombre nuevo.
   + En **Mapper (Mapeador)**, escriba o busque la ubicación de la clase de mapeador de Hadoop o del bucket de S3 donde reside el ejecutable del mapeador, por ejemplo, un programa de Python. El valor de la ruta debe tener el formato*BucketName*//. *path* *MapperExecutable*
   + En **Reducer (Reductor)**, escriba o busque la ubicación de la clase de reductor de Hadoop o de un bucket de S3 donde resida el ejecutable del reductor, por ejemplo, un programa de Python. El valor de la ruta debe tener el formato*BucketName*/*path*/*MapperExecutable*. Amazon EMR soporta la palabra clave especial *agregación*. Para obtener más información, vaya a la biblioteca Aggregate suministrada por Hadoop.
   + En **Input S3 location (Ubicación en S3 de la entrada)**, escriba o busque la ubicación de los datos de entrada. 
   + En **Ubicación en S3 de la salida**, escriba o busque el nombre del bucket de salida de Amazon S3.
   + En **Arguments (Argumentos)**, deje el campo en blanco.
   + En **Action on failure (Acción sobre el error)**, acepte la opción predeterminada, **Continue (Continuar)**.

1. Elija **Añadir**. El paso aparece en la consola con el estado Pending (Pendiente). 

1. El estado del paso cambia de Pending (Pendiente) a Running (En ejecución) y a Completed (Completado) a medida que se ejecuta. Para actualizar el estado, elija el icono **Refresh (Actualizar)** situado encima de la columna Actions (Acciones). 

## AWS CLI
<a name="emr-dev-create-stream-cli"></a>

Estos ejemplos muestran cómo utilizar el paso AWS CLI para crear un clúster y enviar un paso de streaming. 

**Para crear un clúster y enviar un paso de transmisión mediante el AWS CLI**
+ Para crear un clúster y enviar un paso de transmisión mediante el AWS CLI, escriba el siguiente comando y *myKey* sustitúyalo por el nombre del key pair de EC2. Tenga en cuenta que su argumento para `--files` debe ser la ruta de Amazon S3 a la ubicación del script y los argumentos para `-mapper` y `-reducer` deben ser los nombres de los respectivos archivos de script.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,Args=[--files,pathtoscripts,-mapper,mapperscript,-reducer,reducerscript,aggregate,-input,pathtoinputdata,-output,pathtooutputbucket]
  ```
**nota**  
Se incluyen caracteres de continuación de línea de Linux (\$1) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).

  Cuando especifica el recuento de instancias sin utilizar el parámetro `--instance-groups`, se lanza un nodo principal único y el resto de las instancias se lanzan como nodos secundarios. Todos los nodos utilizan el tipo de instancia especificado en el comando.
**nota**  
Si no ha creado con anterioridad el rol de servicio de Amazon EMR predeterminado y el perfil de instancia de EC2, escriba aws `emr create-default-roles` para crearlos antes de escribir el subcomando `create-cluster`.

  Para obtener más información sobre el uso de los comandos de Amazon EMR en AWS CLI, consulte. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

# Procesamiento de datos con un JAR personalizado
<a name="UseCase_CustomJar"></a>

Un JAR personalizado ejecuta un programa Java compilado que carga en Amazon S3. Debería compilar el programa en comparación con la versión de Hadoop que desee lanzar y envíe un paso `CUSTOM_JAR` a su clúster de Amazon EMR. Para más información sobre la compilación de un archivo JAR, consulte [Creación de binarios con Amazon EMR](emr-build-binaries.md).

Para obtener más información sobre cómo crear una MapReduce aplicación de Hadoop, consulte el [MapReduce tutorial en la documentación](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) de Apache Hadoop.

**Topics**
+ [Enviar un paso JAR personalizado](emr-launch-custom-jar-cli.md)

# Enviar un paso JAR personalizado
<a name="emr-launch-custom-jar-cli"></a>

Un JAR personalizado ejecuta un programa Java compilado que carga en Amazon S3. Debería compilar el programa en comparación con la versión de Hadoop que desee lanzar y envíe un paso `CUSTOM_JAR` a su clúster de Amazon EMR. Para más información sobre la compilación de un archivo JAR, consulte [Creación de binarios con Amazon EMR](emr-build-binaries.md).

Para obtener más información sobre cómo crear una MapReduce aplicación de Hadoop, consulte el [MapReduce tutorial](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) en la documentación de Apache Hadoop.

En esta sección se describen los conceptos básicos de enviar un paso JAR personalizado en Amazon EMR. Enviar un paso JAR personalizado le permite escribir un script para procesar los datos mediante el lenguaje de programación Java. 

## Enviar un paso JAR personalizado mediante la consola
<a name="ConsoleCreatingaCustomJARJob"></a>

En este ejemplo se describe cómo utilizar la consola de Amazon EMR para enviar un paso JAR personalizado a un clúster en ejecución.

**Para enviar un paso JAR personalizado mediante la consola**

1. [Abra la consola Amazon EMR en https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. En la **Cluster List (Lista de clústeres)**, seleccione el nombre del clúster.

1. Desplácese hasta la sección **Steps (Pasos)** y amplíela; a continuación, elija **Add step (Añadir paso)**.

1. En el cuadro de diálogo **Add Step (Añadir paso)**:
   + En **Step type (Tipo de paso)**, elija **Custom JAR (JAR personalizado)**.
   + En **Name (Nombre)**, acepte el nombre predeterminado, Custom JAR (JAR personalizado), o escriba un nombre nuevo.
   + En **JAR S3 location (Ubicación en S3 del JAR)**, escriba o busque la ubicación del archivo JAR. La ubicación del JAR puede ser una ruta hacia S3 o una clase java totalmente calificada en la classpath. 
   + En **Arguments (Argumentos)**, escriba los argumentos necesarios como cadenas separadas por espacios o deje el campo en blanco.
   + En **Action on failure (Acción sobre el error)**, acepte la opción predeterminada, **Continue (Continuar)**.

1. Elija **Añadir**. El paso aparece en la consola con el estado Pending (Pendiente). 

1. El estado del paso cambia de Pending (Pendiente) a Running (En ejecución) y a Completed (Completado) a medida que se ejecuta. Para actualizar el estado, elija el icono **Refresh (Actualizar)** situado encima de la columna Actions (Acciones). 

## Lanzar un clúster y enviar un paso JAR personalizado con AWS CLI
<a name="emr-dev-create-jar-cli"></a>

**Para lanzar un clúster y enviar un paso JAR personalizado con el AWS CLI**

Para lanzar un clúster y enviar un paso JAR personalizado con el AWS CLI, escriba el `create-cluster` subcomando con el `--steps` parámetro.
+ Para lanzar un clúster y enviar un paso JAR personalizado, escriba el siguiente comando, *myKey* sustitúyalo por el nombre del key pair de EC2 y *amzn-s3-demo-bucket* sustitúyalo por el nombre del bucket.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"]
  ```
**nota**  
Se incluyen caracteres de continuación de línea de Linux (\$1) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).

  Cuando especifica el recuento de instancias sin utilizar el parámetro `--instance-groups`, se inicia un nodo principal único y el resto de las instancias se inician como nodos básicos. Todos los nodos utilizan el tipo de instancia que especifica en el comando.
**nota**  
Si no ha creado con anterioridad el rol de servicio de Amazon EMR predeterminado y el perfil de instancia de EC2, escriba `aws emr create-default-roles` para crearlos antes de escribir el subcomando `create-cluster`.

  Para obtener más información sobre el uso de los comandos de Amazon EMR en AWS CLI, consulte. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

## Dependencias de terceros
<a name="emr-custom-jar-dependency"></a>

A veces puede ser necesario incluirlo en la MapReduce ruta de clases JARs para usarlo con el programa. Dispone de dos opciones para hacerlo:
+ Incluir el paso `--libjars s3://URI_to_JAR` en las opciones de paso para el procedimiento en [Lanzar un clúster y enviar un paso JAR personalizado con AWS CLI](#emr-dev-create-jar-cli).
+ Lance el clúster con una configuración `mapreduce.application.classpath` modificada en `mapred-site.xml`. Utilice la clasificación de configuración `mapred-site`. Para crear el clúster siguiendo el paso siguiente AWS CLI, tendría el siguiente aspecto:

  ```
  aws emr create-cluster --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --instance-type m5.xlarge --instance-count 2  --ec2-attributes KeyName=myKey \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] \
  --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```

  `myConfig.json`:

  ```
  [
      {
        "Classification": "mapred-site",
        "Properties": {
          "mapreduce.application.classpath": "path1,path2"
        }
      }
    ]
  ```

  La lista de rutas separadas por comas se debe adjuntar al classpath para el JVM de cada tarea.