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

Questo documento descrive il dimensionamento del cluster HDInsight Interactive Query (cluster Hive LLAP) per un carico di lavoro tipico per ottenere prestazioni ragionevoli. 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 consigliati 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 della 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

Architettura/componenti LLAP:

`LLAP Architecture/Components`.

Stime delle dimensioni dei daemon LLAP:

1. Determinazione dell'allocazione totale di memoria YARN per tutti i contenitori in 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 per tutti i contenitori YARN in un nodo = (memoria fisica totale - memoria per sistema operativo e 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 contenitore 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 per ogni richiesta di vcores contenitore 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 maggiore di vcores questo valore non avrà effetto. Si tratta di una proprietà globale dell'utilità di pianificazione YARN. Per il contenitore del daemon LLAP, questo valore può essere impostato sul 75% del totale disponibile vcores. Il rimanente 25% dovrà essere riservato per NodeManager, DataNode e altri servizi in esecuzione nei nodi di lavoro.
16 vcores Esistono macchine virtuali D14 v2 e il 75% del totale 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 ognuna delle code specificate da "hive.server2.tez.default.queues". Corrisponde al numero di macchine virtuali tez (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 più di molti nodi daemon LLAP per ottenere una velocità effettiva maggiore.

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 hive.server2.tez.sessions.per.default.queuedi configurazione Hive:

`LLAP maximum concurrent queries`.

5. Dimensioni master dell'applicazione Tez e Contenitore Tez

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 della capacità della 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 del contenitore del 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 funge da coordinatore di query e il numero di vm Tez deve essere configurato in base a molte query simultanee da gestire. 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 AMs in tutti i nodi del daemon LLAP/nodi di lavoro. È consigliabile avere 4 GB di memoria per ogni Tez AM.

Numero di Tez Ams = 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 tez AM per nodo = (ceil(Numero di tez AMs / Numero di nodi daemon LLAP)x Dimensioni contenitore 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 AM tez 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 il nodo 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 in base alla memoria necessaria per ogni executor e alle 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 questa impostazione per il carico di lavoro di destinazione.

Le VM D14 v2 includono 16 vCore. Per D14 v2, il valore consigliato per num 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 del 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 headroom: questa dimensione indica una parte della memoria off-heap usata per il sovraccarico della macchina virtuale Java (metaspace, stack di thread, gc strutture di dati 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 dell'heap (Xmx): 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:

`LLAP heap size`.

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. L'impostazione di hive.llap.io.allocator.mmap = true abilita la memorizzazione nella cache SSD. 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, dimensioni dei metadati della cache SSD in memoria = 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 del daemon LLAP - (sala head + 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, la dimensione consigliata della cache SSD = 19 GB / 0,08 ~= 237 GB

10. Regolazione della memoria join 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 l'oversubscription della memoria di altri executor per avere più spazio per le tabelle hash in memoria per consentire più conversioni di join mappa. Considerando 3 GB per executor, queste dimensioni possono essere sovrascritte a 3 GB, ma alcune memoria heap possono essere usate anche per buffer di ordinamento, buffer casuali e così via dalle altre operazioni.
Pertanto, 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. L'impostazione di questo valore troppo basso potrebbe non usare la funzionalità di conversione automatica. L'impostazione di un valore troppo elevato può comportare eccezioni di memoria insufficiente o pause di GC che possono causare prestazioni negative.

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).

`Number of Nodes for LLAP service`.
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, quindi genera un llap daemon in ogni nodo.

`Number of Nodes for LLAP daemons`.

È 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 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 llap coda. Assicurarsi di dividere la capacità totale delle risorse del cluster tra llap coda 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 Masters(Tez AMs) quando viene attivato un piano di risorse.

Nota:

  • Gli oem tez 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 macchine virtuali di Tez dipende dal valore di QUERY_PARALLELISM specificato nel piano di risorse.
  • Quando la gestione del carico di lavoro è attiva, le macchine virtuali Tez nella coda LLAP non verranno usate. Per il coordinamento delle query vengono usate solo le macchine virtuali tez dalla coda di gestione del carico di lavoro. Le macchine virtuali tez nella coda vengono usate quando la gestione del llap carico di lavoro è disabilitata.

Ad esempio: Capacità totale cluster = 100 GB di memoria, divisa 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 QUERY_PARALLELISM il valore cinque, il che significa che la gestione del carico di lavoro può avviare cinque VM Tez con dimensioni del contenitore da 4 GB ognuna. Se QUERY_PARALLELISM è superiore alla capacità, è possibile che alcune macchine virtuali Tez smettano di rispondere nello ACCEPTED stato. Il server Hive 2 Interactive non può inviare frammenti di query agli oem Tez che non sono in RUNNING stato.

Passaggi successivi

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