Guia de dimensionamento do Azure HDInsight Interactive Query Cluster (Hive LLAP)
Este documento descreve o dimensionamento do Cluster de Consulta Interativa do HDInsight (cluster LLAP do Hive) para uma carga de trabalho típica para obter um desempenho razoável. Observe que as recomendações fornecidas neste documento são diretrizes genéricas e cargas de trabalho específicas podem precisar de ajustes específicos.
Tipos de VM padrão do Azure para o cluster de consulta interativo do HDInsight (LLAP)
Tipo de Nó | Instância | Tamanho |
---|---|---|
Head | D13 v2 | vcpus 8, 56 GB de RAM, 400 GB SSD |
Trabalhador | D14 v2 | 16 vcpus , 112 GB de RAM, 800 GB SSD |
ZooKeeper | A4 v2 | vcpus 4, 8 GB de RAM, 40 GB SSD |
Nota: Todos os valores de configuração recomendados são baseados no nó de trabalho do tipo D14 v2
Configuração:
Chave de configuração | Valor recomendado | Description |
---|---|---|
yarn.nodemanager.resource.memory-mb | 102400 (MB) | Memória total fornecida, em MB, para todos os contêineres YARN em um nó |
yarn.scheduler.maximum-alocação-mb | 102400 (MB) | A alocação máxima para cada solicitação de contêiner no RM, em MBs. Solicitações de memória superiores a esse valor não terão efeito |
yarn.scheduler.maximum-allocation-vcores | 12 | O número máximo de núcleos de CPU para cada solicitação de contêiner no Gerenciador de Recursos. Solicitações superiores a esse valor não terão efeito. |
yarn.nodemanager.resource.cpu-vcores | 12 | Número de núcleos de CPU por NodeManager que podem ser alocados para contêineres. |
yarn.scheduler.capacity.root.llap.capacity | 85 (%) | Alocação de capacidade YARN para fila LLAP |
tez.am.resource.memory.mb | 4096 (MB) | A quantidade de memória em MB a ser usada pelo tez AppMaster |
hive.server2.tez.sessions.per.default.queue | <number_of_worker_nodes> | O número de sessões para cada fila nomeada nas filas hive.server2.tez.default. Este número corresponde ao número de coordenadores de consulta (Tez AMs) |
hive.tez.container.size | 4096 (MB) | Tamanho especificado do recipiente Tez em MB |
hive.llap.daemon.num.executors | 19 | Número de executores por daemon LLAP |
hive.llap.io.threadpool.size | 19 | Tamanho do pool de threads para executores |
hive.llap.daemon.yarn.container.mb | 81920 (MB) | Memória total em MB usada por daemons LLAP individuais (Memória por daemon) |
hive.llap.io.memory.size | 242688 (MB) | Tamanho do cache em MB por daemon LLAP desde que o cache SSD esteja ativado |
hive.auto.convert.join.noconditionaltask.size | 2048 (MB) | tamanho da memória em MB para fazer Map Join |
Arquitetura/componentes LLAP:
Estimativas de tamanho do LLAP Daemon:
1. Determinando a alocação total de memória YARN para todos os contêineres em um nó
Configuração: yarn.nodemanager.resource.memory-mb
Esse valor indica uma soma máxima de memória em MB que pode ser usada pelos contêineres YARN em cada nó. O valor especificado deve ser menor do que a quantidade total de memória física nesse nó.
Memória total para todos os contêineres YARN em um nó = (Memória física total – memória para SO + Outros serviços)
Defina esse valor como ~90% do tamanho da RAM disponível.
Para D14 v2, o valor recomendado é 102400 MB.
2. Determinação da quantidade máxima de memória por solicitação de contêiner YARN
Configuração: yarn.scheduler.maximum-allocation-mb
Esse valor indica a alocação máxima para cada solicitação de contentor no Gestor de Recursos, em MB. Solicitações de memória superiores ao valor especificado não terão efeito. O Resource Manager pode fornecer memória a contêineres em incrementos de yarn.scheduler.minimum-allocation-mb e não pode exceder o tamanho especificado por yarn.scheduler.maximum-allocation-mb. O valor especificado não deve ser maior do que o total de memória fornecida para todos os contentores no nó especificado por yarn.nodemanager.resource.memory-mb.
Para nós de trabalho D14 v2, o valor recomendado é 102400 MB
3. Determinação da quantidade máxima de pedido de contentor YARN vcores
por YARN
Configuração: yarn.scheduler.maximum-allocation-vcores
Esse valor indica o número máximo de núcleos de CPU virtual para cada solicitação de contentor no Gestor de Recursos. Solicitar um número maior do vcores
que esse valor não terá efeito. É uma propriedade global do agendador YARN. Para o recipiente de daemon LLAP, esse valor pode ser definido como 75% do total disponível vcores
. Os 25% restantes devem ser reservados para NodeManager, DataNode e outros serviços em execução nos nós de trabalho.
16 vcores
Existem VMs D14 v2 e 75% do total 16 vcores
pode ser usado pelo contêiner de daemon LLAP.
Para D14 v2, o valor recomendado é 12.
4. Número de consultas simultâneas
Configuração: hive.server2.tez.sessions.per.default.queue
Esse valor de configuração determina o número de sessões Tez que podem ser iniciadas em paralelo. Essas sessões Tez são iniciadas para cada uma das filas especificadas por "hive.server2.tez.default.queues". Corresponde ao número de Tez AMs (Coordenadores de Consulta). Recomenda-se que seja o mesmo que o número de nós de trabalho. O número de Tez AMs pode ser maior do que o número de nós daemon LLAP. A principal responsabilidade do Tez AM é coordenar a execução da consulta e atribuir fragmentos do plano de consulta aos daemons LLAP correspondentes para execução. Mantenha esse valor como múltiplo de muitos nós de daemon LLAP para obter uma taxa de transferência mais alta.
O cluster HDInsight padrão tem quatro daemons LLAP em execução em quatro nós de trabalho, portanto, o valor recomendado é 4.
Controle deslizante Ambari UI para variável hive.server2.tez.sessions.per.default.queue
de configuração do Hive:
5. Tamanho mestre do recipiente Tez e da aplicação Tez
Configuração: tez.am.resource.memory.mb, hive.tez.container.size
tez.am.resource.memory.mb - define o tamanho do Tez Application Master.
O valor recomendado é 4096 MB.
hive.tez.container.size - define a quantidade de memória fornecida para o recipiente Tez. Este valor tem de ser definido entre o tamanho mínimo do contentor YARN (yarn.scheduler.minimum-allocation-mb) e o tamanho máximo do contentor YARN (yarn.scheduler.maximum-allocation-mb). Os executores do daemon LLAP utilizam esse valor para limitar o uso de memória por executor.
O valor recomendado é 4096 MB.
6. Alocação de capacidade da fila LLAP
Configuração: yarn.scheduler.capacity.root.llap.capacity
Esse valor indica uma percentagem da capacidade dada à fila LLAP. As alocações de capacidade podem ter valores diferentes para volumes de trabalho diferentes, dependendo de como as filas YARN são configuradas. Se a seu volume de trabalho for operações somente leitura, defini-la como 90% da capacidade deve funcionar. No entanto, se o seu volume de trabalho for uma mistura de operações de atualização/eliminação/fusão utilizando tabelas geridas, recomenda-se que atribua 85% da capacidade à fila LLAP. Os restantes 15% de capacidade podem ser utilizados por outras tarefas, como a compactação, etc., para atribuir contentores da fila de espera predefinida. Dessa forma, as tarefas na fila padrão não privarão os recursos do YARN.
Para nós de trabalho D14v2, o valor recomendado para fila LLAP é 85.
(Para cargas de trabalho somente leitura, ele pode ser aumentado até 90 conforme adequado.)
7. Tamanho do recipiente do daemon LLAP
Configuração: hive.llap.daemon.yarn.container.mb
O daemon LLAP é executado como um contêiner YARN em cada nó de trabalho. O tamanho total da memória para o recipiente de daemon LLAP depende dos seguintes fatores,
- Configurações do tamanho do contêiner YARN (yarn.scheduler.minimum-allocation-mb, yarn.scheduler.maximum-allocation-mb, yarn.nodemanager.resource.memory-mb)
- Número de Tez AMs em um nó
- Memória total configurada para todos os contêineres em um nó e capacidade de fila LLAP
A memória necessária para Tez Application Masters (Tez AM) pode ser calculada da seguinte forma.
Tez AM atua como um coordenador de consulta e o número de Tez AMs deve ser configurado com base em muitas consultas simultâneas a serem atendidas. Teoricamente, podemos considerar um Tez AM por nó de trabalhador. No entanto, é possível que você veja mais de um Tez AM em um nó de trabalho. Para fins de cálculo, assumimos a distribuição uniforme de Tez AMs em todos os nós daemon LLAP/nós de trabalho.
Recomenda-se ter 4 GB de memória por Tez AM.
Número de Tez Ams = valor especificado pelo Hive config hive.server2.tez.sessions.per.default.queue.
Número de nós daemon LLAP = especificado pela variável env num_llap_nodes_for_llap_daemons na interface do usuário do Ambari.
Tez AM container size = valor especificado por Tez config tez.am.resource.memory.mb.
Memória Tez AM por nó = (ceil(Número de Tez AMs / Número de nós daemon LLAP) x tamanho do recipiente Tez AM**)**
Para D14 v2, a configuração padrão tem quatro Tez AMs e quatro nós daemon LLAP.
Tez AM memória por nó = (ceil(4/4) x 4 GB) = 4 GB
A memória total disponível para fila LLAP por nó de trabalho pode ser calculada da seguinte forma:
Esse valor depende da quantidade total de memória disponível para todos os contêineres YARN em um nó (yarn.nodemanager.resource.memory-mb) e da porcentagem de capacidade configurada para fila LLAP (yarn.scheduler.capacity.root.llap.capacity).
Total de memória para fila LLAP no nó de trabalho = Total de memória disponível para todos os contêineres YARN em um nó x Porcentagem de capacidade para fila LLAP.
Para D14 v2, esse valor é (100 GB x 0,85) = 85 GB.
O tamanho do recipiente do daemon LLAP é calculado da seguinte forma;
Tamanho do contêiner do daemon LLAP = (Total de memória para fila LLAP em um nó de trabalho) – (Tez AM memory per node) - (Service Master container size)
Há apenas um Service Master (Application Master for LLAP service) no cluster gerado em um dos nós de trabalho. Para fins de cálculo, consideramos um mestre de serviço por nó de trabalhador.
Para o nó de trabalho D14 v2, HDI 4.0 - o valor recomendado é (85 GB - 4 GB - 1 GB)) = 80 GB
8. Determinação do número de executores por daemon LLAP
Configuração: hive.llap.daemon.num.executors, hive.llap.io.threadpool.size
hive.llap.daemon.num.executors:
Essa configuração controla o número de executores que podem executar tarefas em paralelo por daemon LLAP. Esse valor depende do número de vcores, da quantidade de memória utilizada por executor e da quantidade de memória total disponível para o recipiente de daemon LLAP. O número de executores pode ser sobreinscrito para 120% dos vcores disponíveis por nó de trabalho. No entanto, ele deve ser ajustado se não atender aos requisitos de memória com base na memória necessária por executor e no tamanho do contêiner do daemon LLAP.
Cada executor é equivalente a um contentor Tez e pode consumir 4 GB (tamanho do contentor Tez) de memória. Todos os executores no daemon LLAP compartilham a mesma memória de pilha. Com a suposição de que nem todos os executores executam operações com uso intensivo de memória ao mesmo tempo, pode considerar 75% do tamanho do contentor Tez (4 GB) por executor. Desta forma, pode aumentar o número de executores, dando a cada executor menos memória (por exemplo, 3 GB) para aumentar o paralelismo. No entanto, é recomendável ajustar essa configuração para sua carga de trabalho de destino.
Existem 16 vcores em VMs D14 v2. Para D14 v2, o valor recomendado para um de executores é (16 vcores x 120%) ~= 19 em cada nó de trabalho considerando 3 GB por executor.
hive.llap.io.threadpool.size:
Esse valor especifica o tamanho do pool de threads para executores. Como os executores são fixos conforme especificado, é o mesmo que o número de executores por daemon LLAP.
Para D14 v2, o valor recomendado é 19.
9. Determinando o tamanho do cache do daemon LLAP
Configuração: hive.llap.io.memory.size
A memória de contêiner de daemon LLAP consiste nos seguintes componentes;
- Sala de cabeceira
- Memória de pilha usada por executores (Xmx)
- Cache na memória por daemon (seu tamanho de memória off-heap, não aplicável quando o cache SSD está ativado)
- Tamanho dos metadados da cache na memória (aplicável apenas quando a cache SSD está ativada)
Tamanho do headroom: esse tamanho indica uma parte da memória off-heap usada para a sobrecarga da Java VM (metaespaço, pilha de threads, gc
estruturas de dados, etc.). Geralmente, essa sobrecarga é de cerca de 6% do tamanho da pilha (Xmx). Para estar no lado mais seguro, esse valor pode ser calculado como 6% do tamanho total da memória daemon LLAP.
Para D14 v2, o valor recomendado é ceil(80 GB x 0,06) ~= 4 GB.
Tamanho da pilha (Xmx): É a quantidade de memória de pilha disponível para todos os executores.
Tamanho total da pilha = Número de executores x 3 GB
Para D14 v2, esse valor é 19 x 3 GB = 57 GB
Ambari environment variable for LLAP heap size:
Quando o cache SSD é desativado, o cache na memória é a quantidade de memória que é deixada depois de retirar o tamanho do Headroom e o tamanho do Heap do tamanho do recipiente do daemon LLAP.
O cálculo do tamanho do cache difere quando o cache SSD está ativado.
A configuração hive.llap.io.allocator.mmap = true habilita o cache SSD.
Quando o cache SSD está ativado, parte da memória será utilizada para armazenar metadados para o cache SSD. Os metadados são armazenados na memória e espera-se que seja ~8% do tamanho do cache SSD.
Tamanho dos metadados na memória do cache SSD = tamanho do recipiente do daemon LLAP - (Sala principal + Tamanho da pilha)
Para D14 v2, com HDI 4.0, tamanho dos metadados na memória do cache SSD = 80 GB - (4 GB + 57 GB) = 19 GB
Dado o tamanho da memória disponível para armazenar metadados de cache SSD, podemos calcular o tamanho do cache SSD que pode ser suportado.
Tamanho dos metadados na memória do cache SSD = tamanho do contentor do daemon LLAP - (Sala principal + Tamanho da pilha) = 19 GB
Tamanho do cache SSD = tamanho dos metadados na memória para cache SSD (19 GB)/0,08 (8 por cento)
Para D14 v2 e HDI 4.0, o tamanho recomendado do cache SSD = 19 GB / 0,08 ~= 237 GB
10. Ajustando a memória de junção do mapa
Configuração: hive.auto.convert.join.noconditionaltask.size
Verifique se hive.auto.convert.join.noconditionaltask está habilitado para que esse parâmetro entre em vigor.
Essa configuração determina o limite para a seleção do MapJoin pelo otimizador do Hive que considera a sobreassinatura de memória de outros executores para ter mais espaço para tabelas de hash na memória para permitir mais conversões de junção de mapa. Considerando 3 GB por executor, esse tamanho pode ser sobrecarregado para 3 GB, mas alguma memória de pilha também pode ser usada para buffers de classificação, buffers aleatórios, etc. pelas outras operações.
Portanto, para D14 v2, com 3 GB de memória por executor, é recomendável definir esse valor para 2048 MB.
(Nota: Este valor pode necessitar de ajustes adequados à sua carga de trabalho. Definir esse valor muito baixo pode não usar o recurso de conversão automática. E defini-lo muito alto pode resultar em exceções de falta de memória ou pausas de GC que podem resultar em desempenho adverso.)
11. Número de daemons LLAP
Variáveis de ambiente Ambari: num_llap_nodes, num_llap_nodes_for_llap_daemons
num_llap_nodes - especifica o número de nós usados pelo serviço LLAP do Hive, isso inclui nós que executam o daemon LLAP, o LLAP Service Master e o Tez Application Master(Tez AM).
num_llap_nodes_for_llap_daemons - número especificado de nós usados apenas para daemons LLAP. Os tamanhos de contêiner do daemon LLAP são definidos como nó de ajuste máximo, portanto, resulta em um llap
daemon em cada nó.
É recomendável manter ambos os valores iguais ao número de nós de trabalho no cluster de Consulta Interativa.
Considerações para o gerenciamento de carga de trabalho
Se você quiser habilitar o gerenciamento de carga de trabalho para LLAP, certifique-se de reservar capacidade suficiente para que o gerenciamento de carga de trabalho funcione conforme o esperado. O gerenciamento de carga de trabalho requer a configuração de uma fila YARN personalizada, que é além da llap
fila. Certifique-se de dividir a capacidade total de recursos do cluster entre llap
fila e fila de gerenciamento de carga de trabalho de acordo com seus requisitos de carga de trabalho.
O gerenciamento de carga de trabalho gera Tez Application Masters (Tez AMs) quando um plano de recursos é ativado.
Nota:
- As AMs Tez geradas pela ativação de um plano de recursos consomem recursos da fila de gerenciamento de carga de trabalho, conforme especificado pelo
hive.server2.tez.interactive.queue
. - O número de Tez AMs dependeria do valor especificado no plano de
QUERY_PARALLELISM
recursos. - Quando o gerenciamento de carga de trabalho estiver ativo, os Tez AMs na fila LLAP não serão usados. Somente Tez AMs da fila de gerenciamento de carga de trabalho são usados para coordenação de consultas. Tez AMs na fila são usados quando o
llap
gerenciamento de carga de trabalho está desativado.
Por exemplo: Capacidade total do cluster = 100 GB de memória, dividida entre LLAP, Gerenciamento de carga de trabalho e filas padrão da seguinte maneira:
- Capacidade da fila LLAP = 70 GB
- Capacidade da fila de gerenciamento de carga de trabalho = 20 GB
- Capacidade da fila padrão = 10 GB
Com 20 GB de capacidade de fila de gerenciamento de carga de trabalho, um plano de recursos pode especificar QUERY_PARALLELISM
o valor como cinco, o que significa que o gerenciamento de carga de trabalho pode iniciar cinco AMs Tez com tamanho de contêiner de 4 GB cada. Se QUERY_PARALLELISM
for maior do que a capacidade, você pode ver alguns Tez AMs parar de responder no ACCEPTED
estado. O servidor Hive 2 Interactive não pode enviar fragmentos de consulta para as AMs Tez que não estão no RUNNING
estado.
Passos Seguintes
Se a definição destes valores não resolver o problema, visite um dos seguintes...
Obtenha respostas de especialistas do Azure através do Suporte da Comunidade do Azure.
Conecte-se com o @AzureSupport - a conta oficial do Microsoft Azure para melhorar a experiência do cliente conectando a comunidade do Azure aos recursos certos: respostas, suporte e especialistas.
Se precisar de mais ajuda, você pode enviar uma solicitação de suporte do portal do Azure. Selecione Suporte na barra de menus ou abra o hub Ajuda + suporte . Para obter informações mais detalhadas, consulte Como criar uma solicitação de suporte do Azure. O acesso ao suporte para Gestão de Subscrições e faturação está incluído na sua subscrição do Microsoft Azure e o Suporte Técnico é disponibilizado através de um dos Planos de Suporte do Azure.
Outras Referências: