Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Apache Ambari é uma interface web para gerenciar e monitorar clusters HDInsight. Para uma introdução à interface web do Ambari, consulte Gerir clusters HDInsight utilizando a Interface Web do Apache Ambari.
As seções a seguir descrevem as opções de configuração para otimizar o desempenho geral do Apache Hive.
- Para modificar os parâmetros de configuração do Hive, selecione Hive na barra lateral Serviços.
- Navegue até a guia Configurações .
Definir o mecanismo de execução do Hive
O Hive fornece dois mecanismos de execução: Apache Hadoop MapReduce e Apache TEZ. Tez é mais rápido do que MapReduce. Os clusters Linux do HDInsight têm o Tez como mecanismo de execução padrão. Para alterar o mecanismo de execução:
No separador Hive Configs, digite motor de execução na caixa de filtro.
O valor padrão da propriedade Optimization é Tez.
Sintonizar mapeadores
O Hadoop tenta dividir (mapear) um único arquivo em vários arquivos e processar os arquivos resultantes em paralelo. O número de mapeadores depende do número de divisões. Os dois parâmetros de configuração a seguir determinam o número de divisões para o mecanismo de execução Tez:
-
tez.grouping.min-size: Limite inferior no tamanho de uma divisão agrupada, com um valor padrão de 16 MB (16.777.216 bytes). -
tez.grouping.max-size: Limite superior do tamanho de uma divisão agrupada, com um valor padrão de 1 GB (1.073.741.824 bytes).
Como diretriz de desempenho, diminua ambos os parâmetros para melhorar a latência, aumente para obter mais taxa de transferência.
Por exemplo, para definir quatro tarefas de mapeador para um tamanho de dados de 128 MB, você definiria ambos os parâmetros para 32 MB cada (33.554.432 bytes).
Para modificar os parâmetros de limite, navegue até a guia Configurações do serviço Tez. Expanda o painel Geral e localize os
tez.grouping.max-sizeparâmetros etez.grouping.min-size.Defina ambos os parâmetros como 33.554.432 bytes (32 MB).
Essas alterações afetam todos os trabalhos Tez no servidor. Para obter um resultado ideal, escolha os valores de parâmetros apropriados.
Redutores de sintonia
Apache ORC e Snappy oferecem alto desempenho. No entanto, o Hive pode ter poucos redutores por padrão, causando gargalos.
Por exemplo, digamos que você tenha um tamanho de dados de entrada de 50 GB. Esses dados no formato ORC com compressão Snappy é de 1 GB. Hive estima o número de redutores necessários como: (número de bytes de entrada para mapeadores / hive.exec.reducers.bytes.per.reducer).
Com as configurações padrão, este exemplo são quatro redutores.
O hive.exec.reducers.bytes.per.reducer parâmetro especifica o número de bytes processados por redutor. O valor padrão é 64 MB. Ajustar esse valor para baixo aumenta o paralelismo e pode melhorar o desempenho. Ajustá-lo muito baixo também pode produzir muitos redutores, potencialmente afetando negativamente o desempenho. Esse parâmetro é baseado em seus requisitos de dados específicos, configurações de compactação e outros fatores ambientais.
Para modificar o parâmetro, navegue até a guia Configurações do Hive e localize o parâmetro Data per Reducer na página Configurações.
Selecione Editar para modificar o valor para 128 MB (134.217.728 bytes) e pressione Enter para salvar.
Dado um tamanho de entrada de 1.024 MB, com 128 MB de dados por redutor, existem oito redutores (1024/128).
Um valor incorreto para o parâmetro Data per Reducer pode resultar em um grande número de redutores, afetando negativamente o desempenho da consulta. Para limitar o número máximo de redutores, defina
hive.exec.reducers.maxpara um valor apropriado. O valor padrão é 1009.
Habilitar execução paralela
Uma consulta do Hive é executada em um ou mais estágios. Se os estágios independentes puderem ser executados em paralelo, isso aumentará o desempenho da consulta.
Para habilitar a execução de consultas paralelas, navegue até a guia Configuração do Hive e procure a
hive.exec.parallelpropriedade. O valor predefinido é false. Altere o valor para true e pressione Enter para salvar o valor.Para limitar o número de trabalhos a serem executados em paralelo, modifique a
hive.exec.parallel.thread.numberpropriedade. O valor padrão é 8.
Ativar vetorização
O Hive processa dados linha por linha. A vetorização direciona o Hive para processar dados em blocos de 1.024 linhas, em vez de uma linha de cada vez. A vetorização só é aplicável ao formato de arquivo ORC.
Para habilitar uma execução de consulta vetorizada, navegue até a guia Configurações do Hive e procure o
hive.vectorized.execution.enabledparâmetro. O valor padrão é true para Hive 0.13.0 ou posterior.Para habilitar a execução vetorizada para o lado de redução da consulta, defina o
hive.vectorized.execution.reduce.enabledparâmetro como true. O valor predefinido é false.
Habilite a otimização baseada em custos (CBO)
Por padrão, o Hive segue um conjunto de regras para encontrar um plano de execução de consulta ideal. A otimização baseada em custos (CBO) avalia vários planos para executar uma consulta. E atribui um custo a cada plano e, em seguida, determina o plano mais barato para executar uma consulta.
Para habilitar o CBO, navegue até ConfigsSettings do Hive> e encontre Ativar Otimizador Baseado em Custos, depois alterne o interruptor para Ativado.
Os seguintes parâmetros de configuração adicionais aumentam o desempenho da consulta do Hive quando o CBO está habilitado:
hive.compute.query.using.statsQuando definido como true, o Hive usa estatísticas armazenadas em seu metastore para responder a consultas simples como
count(*).
hive.stats.fetch.column.statsAs estatísticas de coluna são criadas quando o CBO está ativado. O Hive usa estatísticas de coluna, que são armazenadas no metastore, para otimizar consultas. Buscar estatísticas de coluna para cada coluna leva mais tempo quando o número de colunas é alto. Quando definida como false, essa configuração desabilita a busca de estatísticas de coluna no metastore.
hive.stats.fetch.partition.statsAs estatísticas básicas de partição, como número de linhas, tamanho dos dados e tamanho do arquivo, são armazenadas no metastore. Se definido como true, as estatísticas de partição são obtidas no metastore. Quando falso, o tamanho do ficheiro é obtido no sistema de ficheiros. E o número de linhas é obtido a partir do esquema de linha.
Consulte a postagem do blog Otimização Baseada em Custos do Hive no Blog do Analytics no Azure para ler mais
Habilitar compactação intermediária
As tarefas de mapeamento criam arquivos intermediários que são usados pelas tarefas do redutor. A compactação intermediária reduz o tamanho do arquivo intermediário.
Os trabalhos do Hadoop geralmente são limitados por gargalos de entrada/saída. A compactação de dados pode acelerar a E/S e a transferência geral da rede.
Os tipos de compressão disponíveis são:
| Formato | Ferramenta | Algoritmo | Extensão de arquivo | Dividir? |
|---|---|---|---|---|
| Gzip | Gzip | DEFLACIONAMENTO | .gz |
Não |
| Bzip2 | Bzip2 | Bzip2 | .bz2 |
Yes |
| LZO | Lzop |
LZO | .lzo |
Sim, se indexado |
| Rápido | N/A | Rápido | Ágil | Não |
Como regra geral, ter o método de compressão splittable é importante, caso contrário, poucos mapeadores serão criados. Se os dados de entrada forem texto, bzip2 é a melhor opção. Para o formato ORC, o Snappy é a opção de compressão mais rápida.
Para habilitar a compactação intermediária, navegue até a guia Configurações do Hive e defina o
hive.exec.compress.intermediateparâmetro como true. O valor predefinido é false.
Observação
Para compactar arquivos intermediários, escolha um codec de compactação com menor custo de CPU, mesmo que o codec não tenha uma saída de alta compressão.
Para definir o codec de compressão intermédia, adicione a propriedade personalizada
mapred.map.output.compression.codecao arquivohive-site.xmloumapred-site.xml.Para adicionar uma configuração personalizada:
a) Navegue até Hive>Configurações>Avançado>Configuração personalizada do hive-site.
b. Selecione Adicionar propriedade... na parte inferior do painel Site de colmeia personalizado.
c. Na janela Adicionar propriedade, insira
mapred.map.output.compression.codeccomo a chave eorg.apache.hadoop.io.compress.SnappyCodeccomo o valor.d. Selecione Adicionar.
Essa configuração compactará o arquivo intermediário usando a compactação Snappy. Uma vez que a propriedade seja adicionada, ela aparece no painel hive-site personalizado.
Observação
Este procedimento modifica o
$HADOOP_HOME/conf/hive-site.xmlarquivo.
Comprimir a saída final
A saída final do Hive também pode ser compactada.
Para compactar a saída final do Hive, navegue até o separador Configurações do Hive e defina o parâmetro
hive.exec.compress.outputcomo true. O valor predefinido é false.Para escolher o codec de compressão de saída, adicione a
mapred.output.compression.codecpropriedade personalizada ao painel de Hive-site personalizado, conforme descrito no passo 3 da secção anterior.
Permitir execução especulativa
A execução especulativa inicia um certo número de tarefas duplicadas para detetar e negar a lista do rastreador de tarefas de execução lenta. Ao mesmo tempo em que melhora a execução geral do trabalho, otimizando os resultados de tarefas individuais.
A execução especulativa não deve ser ativada para tarefas MapReduce de longa duração com grandes quantidades de entrada.
Para ativar a execução especulativa, navegue até ao separador Configurações do Hive e defina o parâmetro
hive.mapred.reduce.tasks.speculative.executioncomo verdadeiro. O valor predefinido é false.
Ajuste partições dinâmicas
O Hive permite criar partições dinâmicas ao inserir registros em uma tabela, sem predefinir todas as partições. Esta capacidade é uma característica poderosa. Embora possa resultar na criação de um grande número de partições. E um grande número de ficheiros para cada partição.
Para que o Hive faça partições dinâmicas, o valor do
hive.exec.dynamic.partitionparâmetro deve ser true (o padrão).Altere o modo de partição dinâmica para strict. No modo estrito, pelo menos uma partição tem que ser estática. Essa configuração impede consultas sem o filtro de partição na cláusula WHERE, ou seja, impede estritamente consultas que verificam todas as partições. Navegue até a guia Configurações do Hive e defina
hive.exec.dynamic.partition.modecomo strict. O valor padrão é nonstrict.Para limitar o número de partições dinâmicas a serem criadas, modifique o
hive.exec.max.dynamic.partitionsparâmetro. O valor padrão é 5000.Para limitar o número total de partições dinâmicas por nó, modifique
hive.exec.max.dynamic.partitions.pernode. O valor padrão é 2000.
Ativar o modo local
O modo local permite que o Hive execute todas as tarefas de um trabalho em uma única máquina. Ou, às vezes, em um único processo. Essa configuração melhora o desempenho da consulta se os dados de entrada forem pequenos. E a sobrecarga de iniciar tarefas para consultas consome uma porcentagem significativa da execução geral da consulta.
Para habilitar o modo local, adicione o parâmetro hive.exec.mode.local.auto ao painel hive-site personalizado, conforme explicado na etapa 3 da seção Habilitar compactação intermediária.
Definir único MapReduce MultiGROUP BY
Quando esta propriedade é definida como verdadeira, uma consulta MultiGROUP BY com chaves de agrupamento comuns gera uma única tarefa MapReduce.
Para habilitar este comportamento, adicione o parâmetro hive.multigroupby.singlereducer ao painel hive-site personalizado, conforme explicado na etapa 3 da seção Habilitar compactação intermédia.
Otimizações adicionais do Hive
As seções a seguir descrevem otimizações adicionais relacionadas ao Hive que você pode definir.
Otimizações de junção
O tipo de junção padrão no Hive é um shuffle join. No Hive, mapeadores especiais leem a entrada e emitem um par chave/valor de junção para um arquivo intermediário. O Hadoop classifica e mescla esses pares em um estágio aleatório. Esta fase de baralhar é cara. Selecionar a associação certa com base nos seus dados pode melhorar significativamente o desempenho.
| Tipo de Adesão | Quando | Como | Configurações do Hive | Observações |
|---|---|---|---|---|
| Juntar-se a Shuffle |
|
|
Nenhuma configuração Hive significativa necessária | Funciona sempre |
| Junção de Mapa |
|
|
hive.auto.convert.join=true |
Rápido, mas limitado |
| Classificar bucket de mesclagem | Se ambas as tabelas forem:
|
Cada processo:
|
hive.auto.convert.sortmerge.join=true |
Eficiência |
Otimizações do mecanismo de execução
Recomendações adicionais para otimizar o motor de execução Hive:
| Configurações | Recomendado | HDInsight Predefinido |
|---|---|---|
hive.mapjoin.hybridgrace.hashtable |
True = mais segura, mais lenta; false = mais rápida | falso |
tez.am.resource.memory.mb |
Limite superior de 4 GB para a maioria | Sintonizado automaticamente |
tez.session.am.dag.submit.timeout.secs |
300+ | 300 |
tez.am.container.idle.release-timeout-min.millis |
20000+ | 10 000 |
tez.am.container.idle.release-timeout-max.millis |
40000+ | 20 000 |
Próximos passos
- Gira clusters HDInsight com a Interface Web do Apache Ambari
- API REST do Apache Ambari
- Optimize Apache Hive queries in Azure HDInsight (Otimizar as consultas do Apache Hive no Azure HDInsight)
- Otimizar clusters
- Otimizar Apache HBase
- Otimizar o Apache Pig