Otimizar a performance de operações do Amazon EMR no DynamoDB
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 as métricas do CloudWatch sobre o throughput do DynamoDB, para melhor gerenciar a carga na sua 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
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 no Guia de gerenciamento do Amazon EMR.
Configuração de porcentagem de leitura
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.
Configuração de porcentagem de gravação
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.
Configuração de duração da repetição
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.
Número de tarefas map
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. 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 ter mais informações, consulte Configurar aplicações.
{ "configurations": [ { "classification": "mapred-site", "properties": { "mapred.tasktracker.map.tasks.maximum": "10" } } ] }
Solicitações de dados em paralelo
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 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
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 esteja ocorrendo, você deve monitorar regularmente o volume de leitura e a limitação em chamadas do aplicativo para DynamoDB::Get
, verificando os logs e monitorando as métricas no Amazon CloudWatch.
Tempo de solicitação
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
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
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.