Diretrizes de ajuste de desempenho para o Hive no HDInsight e Azure Data Lake Storage Gen1
As configurações padrão foram definidas para fornecer bom desempenho em muitos casos de uso diferentes. Para consultas intensivas de E/S, o Hive pode ser ajustado para obter um melhor desempenho com Azure Data Lake Storage Gen1.
Pré-requisitos
- Uma assinatura do Azure. Consulte Obter a avaliação gratuita do Azure.
- Uma conta do Data Lake Storage Gen1. Para obter instruções sobre como criar uma, confira Introdução ao Azure Data Lake Storage Gen1
- Cluster Azure HDInsight com acesso a uma conta do Azure Data Lake Storage Gen1. Veja Criar um cluster HDInsight com Data Lake Storage Gen1. Certifique-se de habilitar a área de trabalho remota para o cluster.
- Execução do Hive no HDInsight. Para saber mais sobre como executar trabalhos de Hive no HDInsight, confira Usar Hive no HDInsight
- Diretrizes de ajuste de desempenho no Data Lake Storage Gen1. Para obter os conceitos gerais de desempenho, consulte Diretrizes de ajuste de desempenho do Data Lake Storage Gen1
Parâmetros
Aqui estão as configurações mais importantes para melhorar o desempenho do Data Lake Storage Gen1:
hive.tez.container.size – a quantidade de memória usada por cada uma das tarefas
tez.grouping.min-size – tamanho mínimo de cada mapeador
tez.grouping.max-size – tamanho máximo de cada mapeador
hive.exec.reducer.bytes.per.reducer – tamanho de cada redutor
hive.tez.container.size — o tamanho do contêiner determina quanto de memória está disponível para cada tarefa. Essa é a entrada principal para controlar a simultaneidade no Hive.
tez.grouping.min-size – esse parâmetro permite definir o tamanho mínimo de cada mapeador. Se o número de mapeadores que o Tez escolher for menor que o valor desse parâmetro, o Tez usará o valor definido aqui.
tez.grouping.max-size – o parâmetro permite definir o tamanho máximo de cada mapeador. Se o número de mapeadores que o Tez escolher for maior que o valor desse parâmetro, o Tez usará o valor definido aqui.
hive.exec.reducer.bytes.per.reducer – esse parâmetro define o tamanho de cada redutor. Por padrão, o tamanho de cada redutor é de 256 MB.
Diretrizes
Definir hive.exec.reducer.bytes.per.reducer – o valor padrão funciona bem quando os dados são descompactados. Para dados compactados, você deve reduzir o tamanho do redutor.
Definir hive.tez.container.size – em cada nó, a memória é especificada por yarn.nodemanager.resource.memory-mb e deve ser corretamente definida no cluster HDI por padrão. Para obter informações adicionais sobre como definir a memória adequada no YARN, confira esta postagem.
As cargas de trabalho que usam muita E/S podem se beneficiar de mais paralelismo reduzindo o tamanho do contêiner do Tez. Isso proporciona ao usuário mais contêineres, o que aumenta a simultaneidade. No entanto, algumas consultas do Hive exigem uma quantidade significativa de memória (por exemplo, MapJoin). Se a tarefa não tiver memória suficiente, você receberá uma exceção de falta de memória durante o runtime. Se você receber sem exceções de falta de memória, será preciso aumentá-la.
O número simultâneo de tarefas em execução ou de paralelismo será limitado pela memória YARN total. O número de contêineres YARN ditará quantas tarefas simultâneas podem ser executadas. Para localizar a memória YARN por nó, você pode ir para o Ambari. Navegue até o YARN e veja a guia Configurações. A memória YARN é exibida nessa janela.
Memória YARN total = nós * memória YARN por nó Número de contêineres YARN = Memória YARN total / tamanho do contêiner Tez
A chave para melhorar o desempenho usando o Data Lake Storage Gen1 é aumentar a simultaneidade o máximo possível. O Tez calcula automaticamente o número de tarefas que devem ser criadas, de modo que você não precisa defini-lo.
Exemplo de cálculo
Digamos que você tenha um cluster D14 de 8 nós.
Memória YARN total = nós * memória YARN por nó Memória YARN total = 8 nós * 96 GB = 768 GB Número de contêineres YARN = 768GB / 3072MB = 256
Limitações
Limitação do data Lake armazenamento Gen1
Se você atingir os limites de largura de banda fornecidos pelo Data Lake Storage Gen1, começará a ver falhas de tarefas. Isso poderia ser identificado observando os erros de limitação nos logs de tarefa. Você pode reduzir o paralelismo aumentando o tamanho do contêiner Tez. Se precisar de mais simultaneidade para seu trabalho, entre em contato conosco.
Para verificar se há problemas de limitação, você precisa habilitar o log de depuração no lado do cliente. Veja como fazer isso:
Coloque a propriedade a seguir as propriedades de log4j na configuração do Hive. Isso pode ser feito no modo de exibição do Ambari: log4j.logger.com.microsoft.azure.datalake.store=DEBUG Reinicie todos os nós/serviços para que a configuração entre em vigor.
Se o problema for de limitação, você verá o código de erro HTTP 429 no arquivo de log do Hive. O arquivo de log do Hive está em /tmp/<usuário>/hive.log
Mais informações sobre o ajuste do Hive
Veja a seguir alguns blogs que ajudarão a ajustar as consultas do Hive:
- Otimizar consultas do Hive para Hadoop no HDInsight
- Codificando o arquivo de consulta do Hive no Azure HDInsight
- Debate sobre como otimizar o Hive no HDInsight