Condividi tramite


Guida al dimensionamento di cluster Interactive Query in HDInsight (Hive LLAP)

Questo documento descrive il dimensionamento del cluster Interactive Query in HDInsight (Hive LLAP) per ottenere prestazioni ragionevoli con un carico di lavoro tipico. Si noti che le raccomandazioni fornite in questo documento sono linee guida generiche e che carichi di lavoro specifici possono richiedere un'ottimizzazione specifica.

Tipi di VM di Azure predefiniti per il cluster Interactive Query in HDInsight (LLAP)

Tipo di nodo Istanza Dimensione
Head D13 v2 8 vcpus, 56 GB DI RAM, UNITÀ SSD DA 400 GB
Lavoro D14 v2 16 vcpus, 112 GB DI RAM, UNITÀ SSD DA 800 GB
ZooKeeper A4 v2 4 vcpus, 8 GB DI RAM, UNITÀ SSD DA 40 GB

Nota: tutti i valori di configurazione raccomandati sono basati sul nodo di lavoro di tipo D14 V2

Configuration (Configurazione):

Chiave di configurazione Valore consigliato Descrizione
yarn.nodemanager.resource.memory-mb 102400 (MB) Memoria totale fornita, in MB, per tutti i contenitori YARN in un nodo
yarn.scheduler.maximum-allocation-mb 102400 (MB) L'allocazione massima per ogni richiesta di contenitori in Resource Manager, in MB. Le richieste di memoria superiori a questo valore non avranno effetto
yarn.scheduler.maximum-allocation-vcores 12 Il numero massimo di core di CPU per ogni richiesta di contenitori in Resource Manager. Le richieste superiori a questo valore non avranno effetto.
yarn.nodemanager.resource.cpu-vcores 12 Numero di core di CPU per NodeManager che è possibile allocare per i contenitori.
yarn.scheduler.capacity.root.llap.capacity 85 (%) Allocazione di capacità YARN per la coda LLAP
tez.am.resource.memory.mb 4096 (MB) La quantità di memoria, in MB, che dovrà usare Tez AppMaster
hive.server2.tez.sessions.per.default.queue <number_of_worker_nodes> Il numero di sessioni per ogni coda specificata in hive.server2.tez.default.queues. Questo numero corrisponde al numero di coordinatori di query (Tez AM)
hive.tez.container.size 4096 (MB) Dimensioni del contenitore Tez specificato, in MB
hive.llap.daemon.num.executors 19 Numero di executor per ogni daemon LLAP
hive.llap.io.threadpool.size 19 Dimensioni del pool di thread per gli executor
hive.llap.daemon.yarn.container.mb 81920 (MB) Memoria totale, in MB, usata dai singoli daemon LLAP (memoria per daemon)
hive.llap.io.memory.size 242688 (MB) Dimensioni della cache, in MB, per il daemon LLAP, purché la cache SSD sia abilitata
hive.auto.convert.join.noconditionaltask.size 2048 (MB) Dimensioni della memoria, in MB, per eseguire un join di mappa

Componenti/Architettura MPP:

`Componenti/Architettura MPP`.

Stime delle dimensioni dei daemon LLAP:

1. Determinazione dell'allocazione di memoria totale a YARN per tutti i contenitori di un nodo

Configurazione: yarn.nodemanager.resource.memory-mb

Questo valore indica la somma massima di memoria, in MB, che possono usare i contenitori YARN in ogni nodo. Il valore specificato dovrà essere minore della quantità totale di memoria fisica disponibile in tale nodo.
Memoria totale di tutti i contenitori YARN in un nodo = (Memoria fisica totale - Memoria per sistema operativo + altri servizi)
Impostare questo valore su circa il 90% delle dimensioni della RAM disponibile.
Per D14 v2, il valore consigliato è 102400 MB

2. Determinazione della quantità massima di memoria per ogni richiesta di contenitori YARN

Configurazione: yarn.scheduler.maximum-allocation-mb

Questo valore indica l'allocazione massima per ogni richiesta di contenitori in Resource Manager, in MB. Le richieste di memoria superiori al valore specificato non avranno effetto. Resource Manager può fornire memoria ai contenitori in incrementi di yarn.scheduler.minimum-allocation-mb e non può superare le dimensioni specificate da yarn.scheduler.maximum-allocation-mb. Il valore specificato non dovrà essere maggiore del totale della memoria fornita per tutti i contenitori nel nodo, specificata da yarn.nodemanager.resource.memory-mb.
Per i nodi di lavoro D14 v2, il valore consigliato è 102400 MB

3. Determinazione della quantità massima di vcores per ogni richiesta di contenitori YARN

Configurazione: yarn.scheduler.maximum-allocation-vcores

Questo valore indica il numero massimo di core di CPU virtuali per ogni richiesta di contenitori in Resource Manager. La richiesta di un numero di vcores superiore a questo valore non avrà effetto. Si tratta di una proprietà globale dell'utilità di pianificazione YARN. Per il contenitore di daemon LLAP, questo valore può essere impostato sul 75% del totale di vcores disponibili. Il rimanente 25% dovrà essere riservato per NodeManager, DataNode e altri servizi in esecuzione nei nodi di lavoro.
Ci sono 16 vcores su macchine virtuali D14 v2 e il 75% del totale di 16 vcores può essere usato dal contenitore del daemon LLAP.
Per D14 v2, il valore consigliato è 12.

4. Numero di query simultanee

Configurazione: hive.server2.tez.sessions.per.default.queue

Questo valore di configurazione determina il numero di sessioni Tez che è possibile avviare in parallelo. Queste sessioni Tez vengono avviate per ogni coda specificata da "hive.server2.tez.default.queues". Il valore corrisponde al numero di Tez AM (coordinatori di query). È consigliabile che sia identico al numero di nodi di lavoro. Il numero di Tez AM può essere maggiore del numero di nodi di daemon LLAP. La principale responsabilità di Tez AM è coordinare l'esecuzione delle query e assegnare frammenti del piano di query ai daemon LLAP corrispondenti per l'esecuzione. Mantenere questo valore come multiplo di molti nodi di daemon LLAP per aumentare la velocità effettiva.

Il cluster di HDInsight predefinito include quattro daemon LLAP in esecuzione in quattro nodi di lavoro, quindi il valore consigliato è 4.

Dispositivo di scorrimento dell'interfaccia utente di Ambari per la variabile di configurazione Hivehive.server2.tez.sessions.per.default.queue:

`Numero massimo di query LLAP simultanee`.

5. Dimensioni di Tez Container e Tez Application Master

Configurazione: tez.am.resource.memory.mb, hive.tez.container.size

tez.am.resource.memory.mb: definisce le dimensioni di Tez Application Master.
Il valore consigliato è 4096 MB.

hive.tez.container.size: definisce la quantità di memoria assegnata a Tez Container. Questo valore deve essere impostato tra le dimensioni minime di contenitori YARN (yarn.scheduler.minimum-allocation-mb) e le dimensioni massime di contenitori YARN (yarn.scheduler.maximum-allocation-mb). Gli executor di daemon LLAP usano questo valore per limitare l'utilizzo di memoria per ogni executor.
Il valore consigliato è 4096 MB.

6. Allocazione di capacità alla coda LLAP

Configurazione: yarn.scheduler.capacity.root.llap.capacity

Questo valore indica una percentuale della capacità assegnata alla coda LLAP. Le allocazioni di capacità possono avere valori diversi per carichi di lavoro diversi, a seconda della configurazione delle code YARN. Se il carico di lavoro è costituito da operazioni di sola lettura, l'impostazione fino al 90% della capacità dovrebbe funzionare. Se invece il carico di lavoro è costituito da una combinazione di operazioni di aggiornamento/eliminazione/unione usando tabelle gestite, è consigliabile assegnare l'85% della capacità alla coda LLAP. Il rimanente 15% della capacità può essere usato da altre attività, ad esempio la compattazione e così via, per allocare contenitori dalla coda predefinita. In questo modo le attività della coda predefinita non tolgono risorse YARN.

Per i nodi di lavoro D14v2, il valore consigliato per la coda LLAP è 85.
Per i carichi di lavoro di sola lettura, può essere aumentato a 90 se appropriato.

7. Dimensioni dei contenitori di daemon LLAP

Configurazione: hive.llap.daemon.yarn.container.mb

Il daemon LLAP viene eseguito come contenitore YARN in ogni nodo di lavoro. Le dimensioni totali della memoria per i contenitori di daemon LLAP dipende dai fattori seguenti:

  • Configurazioni delle dimensioni dei contenitori YARN (yarn.scheduler.minimum-allocation-mb, yarn.scheduler.maximum-allocation-mb, yarn.nodemanager.resource.memory-mb)
  • Numero di Tez AM in un nodo
  • Memoria totale configurata per tutti i contenitori in un nodo e capacità della coda LLAP

La memoria necessaria per Tez Application Master (Tez AM) può essere calcolata come segue.
Tez AM agisce come coordinatore di query e il numero di Tez AM deve essere configurato in base al numero di query contemporanee da servire. Teoricamente, è possibile prendere in considerazione un Tez AM per ogni nodo di lavoro. Tuttavia, è possibile che in un nodo di lavoro vengano visualizzate più di una Tez AM. A scopo di calcolo, si presuppone una distribuzione uniforme di Tez AM in tutti i nodi del daemon LLAP/nodi di lavoro. È consigliabile avere 4 GB di memoria per ogni Tez AM.

Numero di Tez Am = valore specificato da Hive config hive.server2.tez.sessions.per.default.queue.
Numero di nodi del daemon LLAP = specificati dalla variabile env num_llap_nodes_for_llap_daemons nell'interfaccia utente di Ambari.
Dimensioni del contenitore Tez AM = valore specificato da Tez config tez.am.resource.memory.mb.

Memoria di Tez AM per nodo = (ceil(Numero di Tez AM /Numero di nodi di daemon LLAP) x Dimensioni dei contenitori Tez AM **)**
Per D14 v2, la configurazione predefinita include quattro Tez AM e quattro nodi di daemon LLAP.
Memoria del Tez AM per nodo = (ceil(4/4) x 4 GB) = 4 GB

La memoria totale disponibile per la coda LLAP per ogni nodo di lavoro può essere calcolata come segue:
Questo valore dipende dalla quantità totale di memoria disponibile per tutti i contenitori YARN in un nodo (yarn.nodemanager.resource.memory-mb) e dalla percentuale di capacità configurata per la coda LLAP (yarn.scheduler.capacity.root.llap.capacity).
Memoria totale per la coda LLAP nel nodo di lavoro = Memoria totale disponibile per tutti i contenitori YARN in un nodo x Percentuale di capacità per la coda LLAP.
Per D14 v2, questo valore è (100 GB x 0,85) = 85 GB.

Le dimensioni del contenitore di daemon LLAP vengono calcolate come segue:

Dimensioni del contenitore del daemon LLAP = (Memoria totale per la coda LLAP in un nodo di lavoro) - (Memoria Tez AM per nodo) - (Dimensioni del contenitore Master del servizio)
Esiste un solo master del servizio (master applicazione per il servizio LLAP) nel cluster generato in uno dei nodi di lavoro. A scopo di calcolo, si consideri un master del servizio per ogni nodo di lavoro.
Per i nodi di lavoro D14 v2, HDI 4.0, il valore consigliato è (85 GB - 4 GB - 1 GB)) = 80 GB

8. Determinazione del numero di executor per ogni daemon LLAP

Configurazione: hive.llap.daemon.num.executors, hive.llap.io.threadpool.size

hive.llap.daemon.num.executors:
Questa configurazione controlla il numero di executor che possono eseguire attività in parallelo per ogni daemon LLAP. Questo valore dipende dal numero di vCore, dalla quantità di memoria utilizzata per ogni executor e dalla quantità di memoria totale disponibile per il contenitore del demone LLAP. Il numero di executor può essere sovrascritto al 120% dei vcore disponibili per ogni nodo di lavoro. Tuttavia, deve essere regolato se non soddisfa i requisiti di memoria sulla base della memoria necessaria per ogni executor e delle dimensioni del contenitore del daemon LLAP.

Ogni executor equivale a un contenitore Tez e può consumare 4 GB (dimensioni del contenitore Tez) di memoria. Tutti gli executor nel daemon LLAP condividono la stessa memoria heap. Supponendo che non tutti gli executor eseguano operazioni a elevato utilizzo di memoria contemporaneamente, è possibile considerare il 75% delle dimensioni del contenitore Tez (4 GB) per ogni executor. In questo modo è possibile aumentare il numero di executor assegnando a ciascuno di essi meno memoria (ad esempio, 3 GB) per aumentare il parallelismo. È tuttavia consigliabile ottimizzare tale impostazione per il carico di lavoro di destinazione.

Le VM D14 v2 includono 16 vCore. Per D14 v2, il valore consigliato per numero di executor è (16 vcore x 120%) ~= 19 in ogni nodo di lavoro considerando 3 GB per executor.

hive.llap.io.threadpool.size:
Questo valore specifica le dimensioni del pool di thread per gli executor. Poiché gli executor sono fissi, come specificato, il valore è identico al numero di executor per ogni daemon LAAP.
Per D14 v2, il valore consigliato è 19.

9. Determinazione delle dimensioni della cache dei daemon LLAP

Configurazione: hive.llap.io.memory.size

La memoria del contenitore di daemon LLAP è costituita dai componenti seguenti:

  • Capacità aggiuntiva
  • Memoria heap usata dagli executor (Xmx)
  • Cache in memoria per ogni daemon (dimensioni della memoria off-heap, non applicabile se la cache SSD è abilitata)
  • Dimensioni dei metadati della cache in memoria (applicabile solo se la cache SSD è abilitata)

Dimensioni capacità aggiuntiva: indica una parte della memoria off-heap usata per l'overhead delle VM Java (metaspazi, stack di thread, gcstrutture dei dati di GC e così via). In genere, questo overhead è circa il 6% delle dimensioni heap (Xmx). Per una maggiore tranquillità, questo valore può essere calcolato come il 6% del totale della memoria dei daemon LLAP.
Per D14 v2, il valore consigliato è ceil(80 GB x 0,06) ~= 4 GB.

Dimensioni heap(Xmx): si tratta di una quantità di memoria heap disponibile per tutti gli executor. Totale dimensioni heap = Numero di executor x 3 GB
Per D14 v2, questo valore è 19 x 3 GB = 57 GB

Ambari environment variable for LLAP heap size:

`Dimensioni heap LLAP`.

Quando la cache SSD è disabilitata, la cache in memoria corrisponde alla quantità di memoria che rimane dopo aver tolto le dimensioni della capacità aggiuntiva e l’heap dalle dimensioni del contenitore di daemon LLAP.

Il calcolo delle dimensioni della cache è diverso se la cache SSD è abilitata. Se si imposta hive.llap.io.allocator.mmap su true, la cache SSD viene abilitata. Se la cache SSD è abilitata, parte della memoria verrà usata per archiviare i relativi metadati. I metadati vengono archiviati in memoria ed è previsto che le relative dimensioni siano circa l’8% delle dimensioni della cache SSD.
Dimensioni dei metadati in memoria della cache SSD = Dimensioni del contenitore di daemon LLAP - (Capacità aggiuntiva + Dimensioni heap)
Per D14 v2, con HDI 4.0, le dimensioni dei metadati in memoria della cache SSD sono uguali a 80 GB - (4 GB + 57 GB) = 19 GB

Considerando le dimensioni della memoria disponibili per archiviare i metadati della cache SSD, è possibile calcolare le dimensioni della cache SSD supportabili.
Dimensioni dei metadati in memoria per la cache SSD = Dimensioni del contenitore di daemon LLAP - (Capacità aggiuntiva + Dimensioni heap) = 19 GB
Dimensioni della cache SSD = dimensioni dei metadati in memoria per la cache SSD (19 GB) / 0.08 (8%)

Per D14 v2 e HDI 4.0, le dimensioni della cache SSD consigliate sono uguali a 19 GB x 0,08 = 237 GB

10. Regolazione della memoria per join di mappa

Configurazione: hive.auto.convert.join.noconditionaltask.size

Assicurarsi che hive.auto.convert.join.noconditionaltask sia abilitato per rendere effettivo questo parametro. Questa configurazione determina la soglia per la selezione di MapJoin da Hive Optimizer che considera la sovrascrittura della memoria di altri executor al fine di avere più spazio per le tabelle hash in memoria, così da consentire più conversioni di join mappa. Considerando 3 GB per executor, tali dimensioni possono essere sovrascritte fino a 3 GB, ma alcune memorie heap possono essere usate anche per buffer di ordinamento, buffer casuali e così via dalle altre operazioni.
Quindi, per D14 v2, con 3 GB di memoria per executor, è consigliabile impostare questo valore su 2048 MB.

(Nota: questo valore potrebbe richiedere modifiche appropriate per il carico di lavoro. Se viene impostato un valore troppo basso, è possibile che la funzionalità di conversione automatica non venga usata. Se viene impostato un valore troppo alto si potrebbero generare eccezioni di memoria esaurita o pause di GC con conseguenze negative per le prestazioni).

11. Numero di daemon LLAP

Variabili di ambiente Ambari: num_llap_nodes, num_llap_nodes_for_llap_daemons

num_llap_nodes: specifica il numero di nodi usati dal servizio Hive LLAP, inclusi i nodi che eseguono il daemon LLAP, il master del servizio LLAP e Tez Application Master (Tez AM).

'Numero di nodi per il servizio LLAP'.
num_llap_nodes_for_llap_daemons: numero specificato di nodi usati solo per i daemon LLAP. Le dimensioni dei contenitori del daemon LLAP sono impostate su max fit node, generando quindi un daemon llap in ogni nodo.

'Numero di nodi per i daemon LLAP'.

È consigliabile mantenere entrambi i valori uguali al numero di nodi di lavoro nel cluster Interactive Query.

Considerazioni sulla gestione del carico di lavoro

Se si vuole abilitare la gestione del carico di lavoro per LLAP, assicurarsi di riservare una capacità sufficiente per la gestione del carico di lavoro in modo che funzioni come previsto. La gestione del carico di lavoro richiede la configurazione di una coda YARN personalizzata, oltre alla coda llap. Assicurarsi di dividere la capacità totale delle risorse del cluster tra coda llap e coda di gestione del carico di lavoro in base ai requisiti del carico di lavoro. La gestione del carico di lavoro genera Tez Application Master(Tez AM) quando viene attivato un piano di risorse.

Nota:

  • I Tez AM generati attivando un piano di risorse utilizzano le risorse dalla coda di gestione del carico di lavoro come specificato da hive.server2.tez.interactive.queue.
  • Il numero di Tez AM dipende dal valore di QUERY_PARALLELISM specificato nel piano di risorse.
  • Quando la gestione del carico di lavoro è attiva, i Tez AM nella coda LLAP non verranno utilizzate. Per il coordinamento delle query vengono usate solo Tez AM della coda di gestione del carico di lavoro. I Tez AM nella coda llap vengono usati quando la gestione del carico di lavoro è disabilitata.

Ad esempio: Capacità totale cluster = 100 GB di memoria, suddivisa tra LLAP, Gestione carico di lavoro e Code predefinite come indicato di seguito:

  • Capacità coda LLAP = 70 GB
  • Capacità della coda di gestione del carico di lavoro = 20 GB
  • Capacità della coda predefinita = 10 GB

Con 20 GB nella capacità della coda di gestione dei carichi di lavoro, un piano di risorse può specificare il valore QUERY_PARALLELISM come cinque, il che significa che la gestione del carico di lavoro può avviare cinque Tez AM con dimensioni del contenitore da 4 GB ciascuna. Se QUERY_PARALLELISM è superiore alla capacità, è possibile che alcuni Tez AM smettano di rispondere nello stato ACCEPTED. Il server Hive 2 Interactive non può inviare frammenti di query Tez AM che non si trovano nello stato RUNNING.

Passaggi successivi

Se l'impostazione di questi valori non ha consentito di risolvere il problema, vedere una delle risorse seguenti.