

# Tutorial: Como trabalhar com o Amazon DynamoDB e o Apache Hive
<a name="EMRforDynamoDB.Tutorial"></a>

Neste tutorial, você iniciará um cluster do Amazon EMR e, em seguida, usará o Apache Hive para processar os dados armazenados em uma tabela do DynamoDB.

O *Hive* é uma aplicação de data warehouse para o Hadoop que permite processar e analisar dados de várias fontes diferentes. O Hive oferece uma linguagem semelhante a SQL, *HiveQL*, que permite trabalhar com dados armazenados localmente no cluster do Amazon EMR ou em uma fonte de dados externa (como o Amazon DynamoDB).

Para obter mais informações, consulte o [Tutorial do Hive](https://cwiki.apache.org/confluence/display/Hive/Tutorial).

**Topics**
+ [Antes de começar](#EMRforDynamoDB.Tutorial.BeforeYouBegin)
+ [Etapa 1: criar um par de chaves do Amazon EC2](EMRforDynamoDB.Tutorial.EC2KeyPair.md)
+ [Etapa 2: iniciar um cluster do Amazon EMR](EMRforDynamoDB.Tutorial.LaunchEMRCluster.md)
+ [Etapa 3: conectar ao nó líder](EMRforDynamoDB.Tutorial.ConnectToLeaderNode.md)
+ [Etapa 4: carregar dados no HDFS](EMRforDynamoDB.Tutorial.LoadDataIntoHDFS.md)
+ [Etapa 5: copiar dados para o DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)
+ [Etapa 6: consultar os dados na tabela do DynamoDB](EMRforDynamoDB.Tutorial.QueryDataInDynamoDB.md)
+ [Etapa 7: (opcional) limpar](EMRforDynamoDB.Tutorial.CleanUp.md)

## Antes de começar
<a name="EMRforDynamoDB.Tutorial.BeforeYouBegin"></a>

Para este tutorial, você precisará do seguinte:
+ Uma conta da AWS. Se você não tiver uma, consulte [Como se cadastrar na AWS](SettingUp.DynamoWebService.md#SettingUp.DynamoWebService.SignUpForAWS).
+ Um cliente SSH (Secure Shell). É possível usar o cliente SSH para se conectar ao nó líder do cluster do Amazon EMR e executar comandos interativos. Os clientes SSH estão disponíveis por padrão na maioria das instalações de Linux, Unix e Mac OS X. Os usuários do Windows podem fazer download e instalar o cliente [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/), que oferece suporte para SSH.

**Próxima etapa**  
[Etapa 1: criar um par de chaves do Amazon EC2](EMRforDynamoDB.Tutorial.EC2KeyPair.md)

# Etapa 1: criar um par de chaves do Amazon EC2
<a name="EMRforDynamoDB.Tutorial.EC2KeyPair"></a>

Nesta etapa, você criará o par de chaves do Amazon EC2 de que precisa para se conectar a um nó líder do Amazon EMR e executar comandos do Hive.

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Escolha uma região (por exemplo, `US West (Oregon)`). Essa deve ser a mesma região em que a tabela do DynamoDB está localizada.

1. No painel de navegação, selecione **Key Pairs (Pares de chaves)**.

1. Escolha **Criar par de chaves**. 

1. Em **Key pair name**, digite um nome para o seu par de chaves (por exemplo, `mykeypair`) e, em seguida, escolha **Create**. 

1. Baixe o arquivo de chave privada. O nome do arquivo terminará com `.pem` (por exemplo, `mykeypair.pem`). Mantenha esse arquivo de chave privada em um lugar seguro. Você precisará dele para acessar qualquer cluster do Amazon EMR que iniciar com esse par de chaves. 
**Importante**  
Se você perder o par de chaves, não poderá se conectar ao nó líder do seu cluster do Amazon EMR.

   Para obter informações sobre pares de chaves, consulte [Pares de chaves do Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) no *Guia do usuário do Amazon EC2*. 

**Próxima etapa**  
[Etapa 2: iniciar um cluster do Amazon EMR](EMRforDynamoDB.Tutorial.LaunchEMRCluster.md)

# Etapa 2: iniciar um cluster do Amazon EMR
<a name="EMRforDynamoDB.Tutorial.LaunchEMRCluster"></a>

Nesta etapa, você irá configurar e iniciar um cluster do Amazon EMR. O Hive e um handler de armazenamento para DynamoDB já estarão instalados no cluster.

1. Abra o console do Amazon EMR em [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/).

1. Selecione **Create Cluster (Criar cluster)**.

1. Na página **Create Cluster - Quick Options**, faça o seguinte:

   1. Em **Cluster name**, digite um nome para o seu cluster (por exemplo: `My EMR cluster`).

   1. Em **EC2 key pair**, escolha o par de chaves que você criou mais cedo.

   Deixe as outras configurações nos valores padrão.

1. Selecione **Criar cluster**.

Vários minutos serão necessários para o cluster ser iniciado. Você pode usar a página **Cluster Details** (Detalhes do cluster) no console do Amazon EMR para monitorar seu progresso.

Quando o status mudar para `Waiting`, o cluster estará pronto para uso.

## Arquivos de log do cluster e Amazon S3
<a name="EMRforDynamoDB.Tutorial.LaunchEMRCluster.LogFilesAndS3"></a>

Um cluster do Amazon EMR gera arquivos de log que contêm informações sobre o status do cluster e as informações de depuração. As configurações padrão de **Create Cluster – Quick Options** (Criar cluster – Opções rápidas) incluem a configuração do registro em log do Amazon EMR.

O Console de gerenciamento da AWS criará um bucket do Amazon S3, caso ainda não exista um. O nome do bucket é `aws-logs-account-id-region`, onde ` account-id` é o número da sua conta da AWS e `region` é a região em que você iniciou o cluster (por exemplo, `aws-logs-123456789012-us-west-2`).

**nota**  
Você pode usar o console do Amazon S3 para visualizar os arquivos de log. Para obter mais informações, consulte [Visualizar arquivos de log](https://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-manage-view-web-log-files.html) no *Guia de gerenciamento do Amazon EMR*.

Você pode usar esse bucket para outras finalidades, além do log. Por exemplo, você pode usar o bucket como um local para armazenar um script do Hive ou como um destino ao exportar dados do Amazon DynamoDB para o Amazon S3.

**Próxima etapa**  
[Etapa 3: conectar ao nó líder](EMRforDynamoDB.Tutorial.ConnectToLeaderNode.md)

# Etapa 3: conectar ao nó líder
<a name="EMRforDynamoDB.Tutorial.ConnectToLeaderNode"></a>

Quando o status do seu cluster do Amazon EMR mudar para `Waiting`, você poderá se conectar ao nó líder usando SSH e executar operações de linha de comando.

1. No console do Amazon EMR, escolha o nome do cluster para visualizar seu status.

1. Na página **Cluster Details** (Detalhes do cluster), encontre o campo **Master public DNS** (DNS público mestre). Este é o nome DNS público do nó líder do seu cluster do Amazon EMR.

1. À direita do nome DNS, escolha o link **SSH**.

1. Siga as instruções em **Conectar ao nó líder via SSH**.

   Dependendo do seu sistema operacional, escolha a guia **Windows** ou **Mac/Linux** e siga as instruções para se conectar ao nó líder.

Depois de se conectar ao nó líder usando o SSH ou o PuTTY, você verá um prompt de comando semelhante ao seguinte:

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

**Próxima etapa**  
[Etapa 4: carregar dados no HDFS](EMRforDynamoDB.Tutorial.LoadDataIntoHDFS.md)

# Etapa 4: carregar dados no HDFS
<a name="EMRforDynamoDB.Tutorial.LoadDataIntoHDFS"></a>

Nesta etapa, você poderá copiar um arquivo de dados para o Hadoop Distributed File System (HDFS) e, em seguida, criar uma tabela do Hive externa que mapeia para o arquivo de dados.

**Baixar os dados de amostra**

1. Faça download do arquivo de dados de exemplo (`features.zip`):

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

1. Extraia o arquivo `features.txt` do arquivo:

   ```
   unzip features.zip
   ```

1. Visualize as primeiras linhas do arquivo `features.txt`:

   ```
   head features.txt
   ```

   O resultado deve ter a seguinte aparência:

   ```
   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
   ```

   O arquivo `features.txt` contém um subconjunto de dados do United States Board on Geographic Names ([http://geonames.usgs.gov/domestic/download\$1data.htm](http://geonames.usgs.gov/domestic/download_data.htm)). Os campos em cada linha representam o seguinte:
   + ID do recurso (identificador exclusivo)
   + Nome
   + Classe (lago; floresta; riacho; e assim por diante)
   + Estado
   + Latitude (graus)
   + Longitude (graus)
   + Altura (em pés)

1. No prompt de comando, digite o seguinte comando:

   ```
   hive
   ```

   O prompt de comando muda para: `hive>` 

1. Insira a seguinte instrução HiveQL para criar uma tabela nativa do Hive:

   ```
   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. Insira a seguinte instrução HiveQL para carregar a tabela com dados:

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

1. Você agora tem uma tabela nativa do Hive preenchida com os dados do arquivo `features.txt`. Para verificar, insira a seguinte instrução HiveQL:

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

   A saída deve mostrar uma lista de estados e o número de recursos geográficos em cada uma delas.

**Próxima etapa**  
[Etapa 5: copiar dados para o DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)

# Etapa 5: copiar dados para o DynamoDB
<a name="EMRforDynamoDB.Tutorial.CopyDataToDDB"></a>

Nesta etapa, você poderá copiar dados na tabela do Hive (`hive_features`) para uma nova tabela no DynamoDB.

1. Abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. Selecione **Create Table** (Criar tabela).

1. Na página **Create DynamoDB table**, faça o seguinte:

   1. Na **tabela**, digite **Features**.

   1. Para **Primary key** (Chave primária), no campo **Partition key** (Chave da partição), digite **Id**. Defina o tipo de dados como **Number** (Número).

      Desmarque **Use Default Settings** (Usar configurações padrão). Para **Provisioned Capacity**, digite o seguinte:
      + **Unidades de capacidade de leitura**—`10`
      + **Unidades de capacidade de gravação**—`10`

   Escolha **Criar**.

1. No prompt do Hive, insira a seguinte instrução HiveQL: 

   ```
   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"
   );
   ```

   Você agora estabeleceu um mapeamento entre o Hive e a tabela Resources no DynamoDB.

1. Insira a seguinte instrução HiveQL para importar dados para o 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;
   ```

   O Hive enviará um trabalho do MapReduce que será processado por seu cluster do Amazon EMR. Levará vários minutos para o trabalho ser concluído.

1. Verifique se os dados foram carregados para o DynamoDB:

   1. No painel de navegação do console do DynamoDB, escolha **Tables** (Tabelas).

   1. Escolha a tabela Recursos e, em seguida, escolha a guia **Items** para visualizar os dados.

**Próxima etapa**  
[Etapa 6: consultar os dados na tabela do DynamoDB](EMRforDynamoDB.Tutorial.QueryDataInDynamoDB.md)

# Etapa 6: consultar os dados na tabela do DynamoDB
<a name="EMRforDynamoDB.Tutorial.QueryDataInDynamoDB"></a>

Nesta etapa, você usará HiveQL para consultar a tabela Resources no DynamoDB. Experimente as seguintes consultas Hive:

1. Todos os tipos de recursos (`feature_class`) em ordem alfabética:

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

1. Todos os lagos que começam com a letra "M":

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

1. Estados com pelo menos três recursos com mais de uma milha (1,61 km) (5.280 pés, 1.609 m):

   ```
   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;
   ```

**Próxima etapa**  
[Etapa 7: (opcional) limpar](EMRforDynamoDB.Tutorial.CleanUp.md)

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

Agora que concluiu o tutorial, você pode continuar a ler esta seção para saber mais sobre como trabalhar com dados do DynamoDB no Amazon EMR. Você pode optar por manter seu cluster do Amazon EMR em execução ao mesmo tempo em que faz isso.

Se não precisar mais do cluster, termine-o e remova quaisquer recursos associados. Isso ajudará você a não ser cobrado por recursos de que você não precisa.

1. Terminar o cluster do Amazon EMR:

   1. Abra o console do Amazon EMR em [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/).

   1. Escolha o cluster do Amazon EMR, escolha **Terminate** (Terminar) e, em seguida, confirme.

1. Exclua a tabela Resources no DynamoDB:

   1. Abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

   1. No painel de navegação, selecione **Tables** (Tabelas).

   1. Escolha a tabela Resources. No menu **Actions**, escolha **Delete Table**.

1. Excluir o bucket do Amazon S3 que contém os arquivos de log do Amazon EMR:

   1. Abra o console do Amazon S3, em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Na lista de buckets, escolha `aws-logs- accountID-region`, onde *accountID* é o número da sua conta da AWS e *region* é a região em que você iniciou o cluster.

   1. No menu **Action**, escolha **Delete**.