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
- Uma subscrição do Azure. Consulte Obter versão de avaliação gratuita do Azure.
- Uma conta Data Lake Storage Gen1. Para obter instruções sobre como criar uma, consulte Introdução ao Azure Data Lake Storage Gen1
- Cluster do Azure HDInsight com acesso a uma conta Data Lake Storage Gen1. Veja Criar um cluster do HDInsight com Data Lake Storage Gen1. Certifique-se de que ativa o Ambiente de Trabalho Remoto para o cluster.
- Executar o Hive no HDInsight. Para saber mais sobre como executar tarefas do Hive no HDInsight, veja Utilizar o Hive no HDInsight
- Diretrizes de otimização do desempenho em Data Lake Storage Gen1. Para obter conceitos gerais de desempenho, veja Orientações de Otimização do Desempenho do Data Lake Storage Gen1
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:
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.
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:
- Otimizar as consultas do Hive para o Hadoop no HDInsight
- Codificar o ficheiro de consulta do Hive no Azure HDInsight
- Ignite talk on optimize Hive on HDInsight