

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Otimizar a performance de operações do Amazon EMR no DynamoDB
<a name="EMR_Hive_Optimizing"></a>

 As operações do Amazon EMR em uma tabela do DynamoDB contam como operações de leitura e estão sujeitas às configurações de throughput provisionado dessa tabela. O Amazon EMR implementa sua própria lógica para tentar balancear a carga na tabela do DynamoDB a fim de minimizar as chances de que o throughput provisionado seja excedido. No final de cada consulta do Hive, o Amazon EMR retorna informações sobre o cluster usado para processar a consulta, incluindo quantas vezes o throughput provisionado foi excedido. Você pode usar essas informações, bem como CloudWatch métricas sobre a taxa de transferência do DynamoDB, para gerenciar melhor a carga na tabela do DynamoDB em solicitações subsequentes. 

 Os seguintes fatores influenciam a performance de consultas do Hive durante o trabalho com tabelas do DynamoDB. 

## Unidades de capacidade de leitura provisionadas
<a name="ProvisionedReadCapacityUnits"></a>

 Quando você executa consultas do Hive em uma tabela do DynamoDB, precisa certificar-se de ter provisionado uma quantidade suficiente de unidades de capacidade de leitura. 

 Por exemplo, suponha que você tenha provisionado 100 unidades de capacidade de leitura para a sua tabela do DynamoDB. Isso permitirá que você realize 100 leituras, ou 409.600 bytes, por segundo. Se essa tabela contiver 20 GB de dados (21.474.836.480 bytes) e sua consulta do Hive realizar uma verificação de tabela completa, você poderá estimar quanto tempo a consulta demorará para ser executada: 

 * 21.474.836.480/409.600 = 52.429 segundos = 14,56 horas * 

 A única maneira de diminuir o tempo necessário seria ajustar as unidades de capacidade de leitura na tabela DynamoDB de origem. Adicionar mais nós ao cluster do Amazon EMR não vai ajudar. 

 Na saída do Hive, a porcentagem de conclusão é atualizada quando um ou mais processos de mapeador são finalizados. Para uma tabela grande do DynamoDB com uma configuração baixa de Capacidade de leitura provisionada, a saída de percentual de conclusão pode não ser atualizada por um longo tempo. No caso acima, o trabalho parecerá estar 0% concluído por várias horas. Para ver um status mais detalhado sobre o andamento do trabalho, acesse o console do Amazon EMR. Você poderá visualizar o status de tarefas de mapeador individuais e as estatísticas de leituras de dados. 

 Você também pode fazer logon na interface do Hadoop no nó principal e visualizar as estatísticas do Hadoop. Ela mostra o status de tarefas de mapa individuais e algumas estatísticas de leitura de dados. Para obter mais informações, consulte [Web interfaces hosted on the master node](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html) no *Guia de gerenciamento do Amazon EMR*.

## Configuração de porcentagem de leitura
<a name="ReadPercent"></a>

 Por padrão, o Amazon EMR gerencia a carga de solicitações na tabela do DynamoDB de acordo com sua taxa de throughput provisionado atual. No entanto, quando o Amazon EMR retorna informações sobre o trabalho que incluem um alto número de respostas de throughput provisionado excedido, você pode ajustar a taxa de leitura padrão usando o parâmetro `dynamodb.throughput.read.percent` ao configurar a tabela do Hive. Para obter mais informações sobre como configurar o parâmetro de percentual de leitura, consulte [Opções do Hive](EMR_Interactive_Hive.md#EMR_Hive_Options). 

## Configuração de porcentagem de gravação
<a name="WritePercent"></a>

 Por padrão, o Amazon EMR gerencia a carga de solicitações na tabela do DynamoDB de acordo com sua taxa de throughput provisionado atual. No entanto, quando o Amazon EMR retorna informações sobre o seu trabalho que incluem um alto número de respostas de throughput provisionado excedido, você pode ajustar a taxa de gravação padrão usando o parâmetro `dynamodb.throughput.write.percent` ao configurar a tabela do Hive. Para obter mais informações sobre como configurar o parâmetro de percentual de gravação, consulte [Opções do Hive](EMR_Interactive_Hive.md#EMR_Hive_Options). 

## Configuração de duração da repetição
<a name="emr-ddb-retry-duration"></a>

 Por padrão, o Amazon EMR executa novamente uma consulta do Hive caso ela não tenha retornado um resultado dentro de dois minutos, que é o intervalo de repetição padrão. É possível ajustar esse intervalo definindo o parâmetro `dynamodb.retry.duration` ao executar uma consulta do Hive. Para obter mais informações sobre como configurar o parâmetro de percentual de gravação, consulte [Opções do Hive](EMR_Interactive_Hive.md#EMR_Hive_Options). 

## Número de tarefas map
<a name="NumberMapTasks"></a>

 Os daemons mapeadores que o Hadoop executa para processar suas solicitações de exportação e consulta de dados armazenados no DynamoDB estão limitado a uma taxa de leitura máxima de 1 MiB por segundo, para limitar a capacidade de leitura utilizada. Se você tiver throughput provisionado adicional disponível no DynamoDB, poderá melhorar a performance de operações de exportação e consulta do Hive aumentando o número de daemons mapeadores. Para fazer isso, é possível aumentar o número de instâncias do EC2 no cluster *ou* aumentar o número de daemons mapeadores em execução em cada instância do EC2. 

 É possível aumentar o número de instâncias do EC2 em um cluster interrompendo o cluster atual e executando-o novamente com um número maior de instâncias do EC2. Você especifica o número de instâncias do EC2 na caixa de diálogo **Configurar instâncias do EC2** ao executar o cluster no console do Amazon EMR ou com a opção `--num-instances` ao executar o cluster na CLI. 

 O número de tarefas map executadas em uma instância depende do tipo de instância do EC2. Para obter mais informações sobre os tipos de instâncias do EC2 com suporte e o número de mapeadores que cada uma fornece, acesse [Configuração da tarefa](emr-hadoop-task-config.md). Lá, você encontrará uma seção "Configuração de tarefas" para cada uma das configurações com suporte. 

 Outra maneira de aumentar o número de daemons mapeadores é alterar o parâmetro de configuração `mapreduce.tasktracker.map.tasks.maximum` do Hadoop para um valor mais alto. Isso tem a vantagem de proporcionar mais mapeadores sem aumentar o número ou o tamanho de instâncias do EC2, o que gera uma boa economia de custos. Uma desvantagem é que definir esse valor muito alto pode fazer com que as instâncias do EC2 no seu cluster fiquem sem memória. Para definir `mapreduce.tasktracker.map.tasks.maximum`, inicie o cluster e especifique um valor para `mapreduce.tasktracker.map.tasks.maximum` como uma propriedade da classificação de configuração mapred-site. Isso é mostrado no exemplo a seguir. Para obter mais informações, consulte [Configurar aplicações](emr-configure-apps.md).

```
{
    "configurations": [
    {
        "classification": "mapred-site",
        "properties": {
            "mapred.tasktracker.map.tasks.maximum": "10"
        }
    }
    ]
}
```

## Solicitações de dados em paralelo
<a name="ParallelDataRequests"></a>

 Várias solicitações de dados, seja de mais de um usuário ou de mais de um aplicativo, para uma única tabela podem esgotar o throughput provisionado de leitura e diminuir o desempenho. 

## Duração do processo
<a name="ProcessDuration"></a>

 A consistência dos dados no DynamoDB depende da ordem de operações de leitura e gravação em cada nó. Embora uma consulta do Hive esteja em andamento, outra aplicação pode carregar novos dados para a tabela do DynamoDB ou modificar ou excluir dados existentes. Nesse caso, os resultados da consulta do Hive podem não refletir as alterações feitas nos dados enquanto a consulta estava em execução. 

## Evitar exceder o throughput
<a name="AvoidExceedingThroughput"></a>

 Ao executar consultas do Hive no DynamoDB, tome cuidado para não exceder seu throughput provisionado, pois isso esgotará a capacidade necessária para chamadas da aplicação para `DynamoDB::Get`. Para garantir que isso não ocorra, você deve monitorar regularmente o volume de leitura e a limitação das chamadas do aplicativo, `DynamoDB::Get` verificando os registros e as métricas de monitoramento na Amazon. CloudWatch 

## Tempo de solicitação
<a name="RequestTime"></a>

 Programa consultas do Hive que acessam uma tabela do Dynamo quando há menor demanda na tabela do DynamoDB melhora a performance. Por exemplo, se a maioria dos usuários do aplicativo morar em São Francisco, você poderá optar por exportar os dados diariamente às 4h. PST, quando a maioria dos usuários estiver dormindo e não atualizando registros no banco de dados do DynamoDB. 

## Tabelas baseadas em tempo
<a name="TimeBasedTables"></a>

 Se os dados estiverem organizados como uma série de tabelas do DynamoDB com base no tempo, como uma tabela por dia, você poderá exportá-los quando a tabela não estiver mais ativa. Você pode usar essa técnica para fazer o backup dos dados para o Amazon S3 de uma forma contínua. 

## Dados arquivados
<a name="ArchivedData"></a>

 Se você planeja executar muitas consultas Hive nos dados armazenados no DynamoDB e sua aplicação pode tolerar dados arquivados, talvez queira exportar esses dados para o HDFS ou o Amazon S3 e executar consultas Hive em uma cópia dos dados em vez de no DynamoDB. Isto conserva suas operações de leitura e o throughput provisionado. 