

# Tutorial: Uso de Amazon DynamoDB y Apache Hive
<a name="EMRforDynamoDB.Tutorial"></a>

En este tutorial, lanzaremos un clúster de Amazon EMR y, a continuación, usaremos Apache Hive para procesar los datos almacenados en una tabla de DynamoDB.

*Hive* es una aplicación de almacenamiento de datos para Hadoop que permite procesar y analizar datos de varios orígenes. Hive proporciona un lenguaje similar a SQL, *HiveQL*, que permite trabajar con datos almacenados localmente en el clúster de Amazon EMR o en un origen de datos externo (como Amazon DynamoDB).

Para obtener más información, consulte el [Hive Tutorial](https://cwiki.apache.org/confluence/display/Hive/Tutorial).

**Topics**
+ [Antes de empezar](#EMRforDynamoDB.Tutorial.BeforeYouBegin)
+ [Paso 1: Crear un par de claves de Amazon EC2](EMRforDynamoDB.Tutorial.EC2KeyPair.md)
+ [Paso 2: lanzar un clúster de Amazon EMR](EMRforDynamoDB.Tutorial.LaunchEMRCluster.md)
+ [Paso 3: conectarse al nodo principal](EMRforDynamoDB.Tutorial.ConnectToLeaderNode.md)
+ [Paso 4: cargar los datos en HDFS](EMRforDynamoDB.Tutorial.LoadDataIntoHDFS.md)
+ [Paso 5: copiar los datos a DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)
+ [Paso 6: consultar los datos en la tabla de DynamoDB](EMRforDynamoDB.Tutorial.QueryDataInDynamoDB.md)
+ [Paso 7: limpieza (opcional)](EMRforDynamoDB.Tutorial.CleanUp.md)

## Antes de empezar
<a name="EMRforDynamoDB.Tutorial.BeforeYouBegin"></a>

Para este tutorial, necesitará lo siguiente:
+ Una cuenta de AWS. Si no dispone de una, consulte [Inscripción en AWS](SettingUp.DynamoWebService.md#SettingUp.DynamoWebService.SignUpForAWS).
+ Un cliente SSH (Secure Shell). El cliente SSH se utiliza para conectarse al nodo líder del clúster de Amazon EMR y ejecutar comandos interactivos. Los clientes SSH están disponibles de forma predeterminada en la mayoría de las instalaciones de Linux, Unix y Mac OS X. Los usuarios de Windows pueden descartar e instalar el cliente [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/), que es compatible con SSH.

**Siguiente paso**  
[Paso 1: Crear un par de claves de Amazon EC2](EMRforDynamoDB.Tutorial.EC2KeyPair.md)

# Paso 1: Crear un par de claves de Amazon EC2
<a name="EMRforDynamoDB.Tutorial.EC2KeyPair"></a>

En este paso, crearemos el par de claves de Amazon EC2 que se requiere para conectarse a un nodo líder de Amazon EMR y ejecutar comandos de Hive.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Elija una región (por ejemplo, `US West (Oregon)`). Debe ser la misma región en la que se encuentra la tabla de DynamoDB.

1. En el panel de navegación, seleccione **Key Pairs (Pares de claves)**.

1. Seleccione **Create Key Pair**. 

1. En **Key pair name**, escriba un nombre para el par de claves (por ejemplo, `mykeypair`) y después elija **Create**. 

1. Descargue el archivo de clave privada. El nombre de archivo terminará con `.pem` (por ejemplo, `mykeypair.pem`). Mantenga este archivo de clave privada en un lugar seguro. Lo necesitará para acceder a cualquier clúster de Amazon EMR que lance con este par de claves. 
**importante**  
Si pierde el par de clave, no podrá conectarse al nodo líder del clúster de Amazon EMR.

   Para obtener más información sobre los pares de claves, consulte [Pares de claves de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) en la *Guía del usuario de Amazon EC2*. 

**Siguiente paso**  
[Paso 2: lanzar un clúster de Amazon EMR](EMRforDynamoDB.Tutorial.LaunchEMRCluster.md)

# Paso 2: lanzar un clúster de Amazon EMR
<a name="EMRforDynamoDB.Tutorial.LaunchEMRCluster"></a>

En este paso, configuraremos y lanzaremos un clúster de Amazon EMR. Ya estarán instalados en el clúster tanto Hive como un controlador de almacenamiento para DynamoDB.

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

1. Elija **Create Cluster (Crear clúster)**.

1. En la página **Create Cluster - Quick Options**, haga lo siguiente:

   1. En **Cluster name**, escriba el nombre del clúster (por ejemplo, `My EMR cluster`).

   1. En **EC2 key pair**, elija el par de claves que creó anteriormente.

   No cambie los valores predeterminados de los demás ajustes.

1. Elija **Create cluster**.

Se tardan unos minutos en lanzar el clúster. Puede utilizar la página **Cluster Details (Detalles del clúster)** de la consola de Amazon EMR para monitorear el progreso.

Cuando el estado cambia a `Waiting`, el clúster está preparado para usarlo.

## Archivos del registro del clúster y Amazon S3
<a name="EMRforDynamoDB.Tutorial.LaunchEMRCluster.LogFilesAndS3"></a>

Un clúster de Amazon EMR genera archivos de registros que contienen información acerca del estado del clúster y sobre depuración. La configuración predeterminada de **Create Cluster - Quick Options (Crear un clúster: opciones rápidas)** incluye la configuración de registros de Amazon EMR.

Si no hay un bucket de Amazon S3, la Consola de administración de AWS lo crea. El nombre del bucket es `aws-logs-account-id-region`, donde ` account-id` es el número de su cuenta de AWS y `region` es la región donde lanzó el clúster (por ejemplo, `aws-logs-123456789012-us-west-2`).

**nota**  
Puede usar la consola de Amazon S3 para ver los archivos de registro. Para obtener más información, consulte [View Log Files (Ver archivos de registros)](https://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-manage-view-web-log-files.html) en la *Guía de administración de Amazon EMR*.

Puede usar este bucket para otros fines, además de generar registros. Por ejemplo, puede utilizar el bucket como ubicación para almacenar un script de Hive o como destino al exportar datos de Amazon DynamoDB a Amazon S3.

**Siguiente paso**  
[Paso 3: conectarse al nodo principal](EMRforDynamoDB.Tutorial.ConnectToLeaderNode.md)

# Paso 3: conectarse al nodo principal
<a name="EMRforDynamoDB.Tutorial.ConnectToLeaderNode"></a>

Cuando el estado del clúster de Amazon EMR cambia a `Waiting`, ya puede conectarse al nodo líder mediante SSH y llevar a cabo operaciones de línea de comandos.

1. En la consola de Amazon EMR, elija el nombre del clúster para ver su estado.

1. En la página **Cluster Details (Detalles del clúster)**, busque el campo **Leader public DNS (DNS público del líder)**. Se trata del nombre de DNS público del nodo líder del clúster de Amazon EMR.

1. A la derecha del nombre de DNS, elija el enlace **SSH**.

1. Siga las instrucciones de **Conectarse al nodo líder mediante SSH**.

   Según cuál sea su sistema operativo, elija la pestaña **Windows** o **Mac/Linux**. A continuación, siga las instrucciones para conectarse al nodo líder.

Después de conectarse al nodo líder mediante SSH o PuTTY, debe aparecer un símbolo del sistema parecido al siguiente:

```
[hadoop@ip-192-0-2-0 ~]$ 
```

**Siguiente paso**  
[Paso 4: cargar los datos en HDFS](EMRforDynamoDB.Tutorial.LoadDataIntoHDFS.md)

# Paso 4: cargar los datos en HDFS
<a name="EMRforDynamoDB.Tutorial.LoadDataIntoHDFS"></a>

En este paso, copiaremos un archivo de datos en Hadoop Distributed File System (HDFS) y, a continuación, crearemos una tabla Hive externa mapeada con ese archivo de datos.

**Descarga del ejemplo de datos**

1. Descargue el ejemplo de archivo de datos (`features.zip`):

   ```
   wget https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/samples/features.zip
   ```

1. Extraiga el archivo `features.txt` del archivo comprimido:

   ```
   unzip features.zip
   ```

1. Vea las primeras líneas del archivo `features.txt`:

   ```
   head features.txt
   ```

   El resultado debe ser parecido al siguiente:

   ```
   1535908|Big Run|Stream|WV|38.6370428|-80.8595469|794
   875609|Constable Hook|Cape|NJ|40.657881|-74.0990309|7
   1217998|Gooseberry Island|Island|RI|41.4534361|-71.3253284|10
   26603|Boone Moore Spring|Spring|AZ|34.0895692|-111.410065|3681
   1506738|Missouri Flat|Flat|WA|46.7634987|-117.0346113|2605
   1181348|Minnow Run|Stream|PA|40.0820178|-79.3800349|1558
   1288759|Hunting Creek|Stream|TN|36.343969|-83.8029682|1024
   533060|Big Charles Bayou|Bay|LA|29.6046517|-91.9828654|0
   829689|Greenwood Creek|Stream|NE|41.596086|-103.0499296|3671
   541692|Button Willow Island|Island|LA|31.9579389|-93.0648847|98
   ```

   El archivo `features.txt` contiene un subconjunto de los datos del United States Board on Geographic Names (Consejo Estadounidense de Nombres Geográficos) ([http://geonames.usgs.gov/domestic/download\$1data.htm](http://geonames.usgs.gov/domestic/download_data.htm)). Los campos de cada línea representan lo siguiente:
   + Identificador del accidente geográfico (identificador único)
   + Nombre
   + Clase (lago, bosque, arroyo, etc.)
   + Estado
   + Latitud (grados)
   + Longitud (grados)
   + Altitud (en pies)

1. En el símbolo del sistema, escriba el siguiente comando:

   ```
   hive
   ```

   El símbolo del sistema cambia a lo siguiente: `hive>` 

1. Escriba la siguiente instrucción de HiveQL para crear una tabla de Hive nativa:

   ```
   CREATE TABLE hive_features
       (feature_id             BIGINT,
       feature_name            STRING ,
       feature_class           STRING ,
       state_alpha             STRING,
       prim_lat_dec            DOUBLE ,
       prim_long_dec           DOUBLE ,
       elev_in_ft              BIGINT)
       ROW FORMAT DELIMITED
       FIELDS TERMINATED BY '|'
       LINES TERMINATED BY '\n';
   ```

1. Escriba la siguiente instrucción de HiveQL para cargar datos en la tabla:

   ```
   LOAD DATA
   LOCAL
   INPATH './features.txt'
   OVERWRITE
   INTO TABLE hive_features;
   ```

1. Ahora, tenemos una tabla de Hive nativa que contiene los datos del archivo `features.txt`. Para comprobarlo, escriba la siguiente instrucción de HiveQL:

   ```
   SELECT state_alpha, COUNT(*)
   FROM hive_features
   GROUP BY state_alpha;
   ```

   El resultado debería ser una lista de estados y el número de accidentes geográficos de cada uno de ellos.

**Siguiente paso**  
[Paso 5: copiar los datos a DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)

# Paso 5: copiar los datos a DynamoDB
<a name="EMRforDynamoDB.Tutorial.CopyDataToDDB"></a>

En este paso, copiaremos los datos de la tabla de Hive (`hive_features`) en una nueva tabla de DynamoDB.

1. Abra la consola de DynamoDB en [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. Seleccione **Create Table (Crear tabla)**.

1. En la página **Create DynamoDB table**, haga lo siguiente:

   1. En la **Table (Tabla)** escriba **Features**.

   1. En **Primary key (Clave principal)**, en el campo **Partition key (Clave de partición)**, escriba **Id**. Establezca el tipo de datos en **Number (Número)**.

      Desactive **Use Default Settings (Usar configuración predeterminada)**. En **Provisioned Capacity**, especifique lo siguiente:
      + **Unidades de capacidad de lectura**—`10`
      + **Unidades de capacidad de escritura**—`10`

   Seleccione **Crear**.

1. En el símbolo del sistema de Hive, escriba la instrucción de HiveQL siguiente: 

   ```
   CREATE EXTERNAL TABLE ddb_features
       (feature_id   BIGINT,
       feature_name  STRING,
       feature_class STRING,
       state_alpha   STRING,
       prim_lat_dec  DOUBLE,
       prim_long_dec DOUBLE,
       elev_in_ft    BIGINT)
   STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
   TBLPROPERTIES(
       "dynamodb.table.name" = "Features",
       "dynamodb.column.mapping"="feature_id:Id,feature_name:Name,feature_class:Class,state_alpha:State,prim_lat_dec:Latitude,prim_long_dec:Longitude,elev_in_ft:Elevation"
   );
   ```

   Ahora, hemos establecido un mapeo entre Hive y la tabla Features de DynamoDB.

1. Ingrese la siguiente instrucción de HiveQL para importar los datos a DynamoDB:

   ```
   INSERT OVERWRITE TABLE ddb_features
   SELECT
       feature_id,
       feature_name,
       feature_class,
       state_alpha,
       prim_lat_dec,
       prim_long_dec,
       elev_in_ft
   FROM hive_features;
   ```

   Hive enviará un trabajo de MapReduce, que se procesará en el clúster de Amazon EMR. El trabajo puede tardará varios minutos en completarse.

1. Compruebe que los datos se han cargado en DynamoDB:

   1. En el panel de navegación de la consola de DynamoDB, elija **Tables (Tablas)**.

   1. Elija la tabla Features y, a continuación, elija la pestaña **Items** para ver los datos.

**Siguiente paso**  
[Paso 6: consultar los datos en la tabla de DynamoDB](EMRforDynamoDB.Tutorial.QueryDataInDynamoDB.md)

# Paso 6: consultar los datos en la tabla de DynamoDB
<a name="EMRforDynamoDB.Tutorial.QueryDataInDynamoDB"></a>

En este paso, vamos a usar HiveQL para consultar la tabla Features en DynamoDB. Pruebe las siguientes consultas en Hive:

1. Todos los tipos de accidentes geográficos (`feature_class`) por orden alfabético:

   ```
   SELECT DISTINCT feature_class
   FROM ddb_features
   ORDER BY feature_class;
   ```

1. Todos los lagos que empiezan por la letra "M":

   ```
   SELECT feature_name, state_alpha
   FROM ddb_features
   WHERE feature_class = 'Lake'
   AND feature_name LIKE 'M%'
   ORDER BY feature_name;
   ```

1. Los estados que tienen al menos tres accidentes geográficos con más de una milla de altitud (5280 pies/1609,34 metros):

   ```
   SELECT state_alpha, feature_class, COUNT(*)
   FROM ddb_features
   WHERE elev_in_ft > 5280
   GROUP by state_alpha, feature_class
   HAVING COUNT(*) >= 3
   ORDER BY state_alpha, feature_class;
   ```

**Siguiente paso**  
[Paso 7: limpieza (opcional)](EMRforDynamoDB.Tutorial.CleanUp.md)

# Paso 7: limpieza (opcional)
<a name="EMRforDynamoDB.Tutorial.CleanUp"></a>

Una vez completado el tutorial, puede continuar leyendo esta sección para obtener más información sobre cómo usar los datos de DynamoDB en Amazon EMR. Mientras lo hace, puede que prefiera mantener el clúster de Amazon EMR en funcionamiento.

Sin embargo, cuando ya no necesite el clúster, conviene terminarlo y eliminar todos los recursos asociados. De este modo, evitará que se le cobre por los recursos que no necesita.

1. Termine el clúster de Amazon EMR:

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

   1. Elija el clúster de Amazon EMR, elija **Terminate (Terminar)** y, a continuación, confirme la operación.

1. Elimine la tabla Features de DynamoDB:

   1. Abra la consola de DynamoDB en [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

   1. En el panel de navegación, elija **Tablas**.

   1. Elija la tabla Features. En el menú **Actions**, elija **Delete Table**.

1. Elimine el bucket de Amazon S3 que contiene los archivos de registros de Amazon EMR:

   1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3/).

   1. En la lista de buckets, elija `aws-logs- accountID-region`, donde *accountID* es el número de su cuenta de AWS y *region* es la región en la que ha lanzado el clúster.

   1. En el menú **Action**, elija **Delete**.