Orientações de otimização do desempenho para o Hive no HDInsight e Azure Data Lake Storage Gen1

As predefinições foram definidas para proporcionar um bom desempenho em muitos casos de utilização diferentes. Para consultas intensivas de E/S, o Hive pode ser otimizado para obter um melhor desempenho com Azure Data Lake Storage Gen1.

Pré-requisitos

Parâmetros

Eis as definições mais importantes para otimizar o desempenho Data Lake Storage Gen1 melhorado:

  • hive.tez.container.size – a quantidade de memória utilizada por cada tarefa

  • tez.grouping.min-size – tamanho mínimo de cada mapeador

  • tamanho tez.grouping.max – tamanho máximo de cada mapeador

  • hive.exec.reducer.bytes.per.reducer – tamanho de cada redução

hive.tez.container.size - O tamanho do contentor determina a quantidade de memória disponível para cada tarefa. Esta é a principal entrada para controlar a simultaneidade no Hive.

tez.grouping.min-size – este parâmetro permite-lhe definir o tamanho mínimo de cada mapeador. Se o número de mapeadores escolhidos por Tez for menor do que o valor deste parâmetro, o Tez utilizará o valor definido aqui.

tez.grouping.max tamanho – o parâmetro permite-lhe definir o tamanho máximo de cada mapeador. Se o número de mapeadores escolhidos por Tez for maior do que o valor deste parâmetro, o Tez utilizará o valor definido aqui.

hive.exec.reducer.bytes.per.reducer – este parâmetro define o tamanho de cada redução. Por predefinição, cada redução é de 256 MB.

Orientação

Defina hive.exec.reducer.bytes.per.reducer – o valor predefinido funciona bem quando os dados são descomprimidos. Para os dados comprimidos, 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 definida corretamente no cluster HDI por predefinição. Para obter informações adicionais sobre como definir a memória adequada no YARN, veja esta mensagem.

As cargas de trabalho intensivas de E/S podem beneficiar de mais paralelismo ao diminuir o tamanho do contentor Tez. Isto dá ao utilizador mais contentores, o que aumenta a simultaneidade. No entanto, algumas consultas do Hive requerem uma quantidade significativa de memória (por exemplo, MapJoin). Se a tarefa não tiver memória suficiente, obterá uma exceção de memória esgotada durante o runtime. Se receber exceções de memória esgotada, deve aumentar a memória.

O número simultâneo de tarefas em execução ou paralelismo será limitado pela memória yarn total. O número de contentores YARN ditará quantas tarefas simultâneas podem ser executadas. Para localizar a memória YARN por nó, pode aceder ao Ambari. Navegue para YARN e veja o separador Configurações. A memória YARN é apresentada nesta janela.

Memória total do YARN = nós * memória YARN por nó Número de contentores YARN = Memória total do YARN/Tamanho do contentor Tez

A chave para melhorar o desempenho com 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 para que não seja necessário defini-lo.

Cálculo de Exemplo

Digamos que tem um cluster D14 de 8 nós.

Memória total do YARN = nós * memória YARN por nó Memória total do YARN = 8 nós * 96 GB = 768 GB Número de contentores YARN = 768 GB / 3072MB = 256

Limitações

limitação de Data Lake Storage Gen1

Se atingir os limites de largura de banda fornecidos pelo Data Lake Storage Gen1, começaria a ver falhas nas tarefas. Isto pode ser identificado ao observar erros de limitação nos registos de tarefas. Pode diminuir o paralelismo ao aumentar o tamanho do contentor Tez. Se precisar de mais simultaneidade para o seu trabalho, contacte-nos.

Para verificar se está a ser limitado, tem de ativar o registo de depuração no lado do cliente. Eis como pode fazê-lo:

  1. Coloque a seguinte propriedade nas propriedades log4j na configuração do Hive. Isto pode ser feito a partir da vista do Ambari: log4j.logger.com.microsoft.azure.datalake.store=DEBUG Reinicie todos os nós/serviço para que a configuração entre em vigor.

  2. Se estiver a ser limitado, verá o código de erro HTTP 429 no ficheiro de registo do hive. O ficheiro de registo do hive está em /tmp/<user>/hive.log

Mais informações sobre a otimização do Hive

Eis alguns blogues que ajudarão a otimizar as suas consultas do Hive: