Handleiding voor het aanpassen van de grootte van Azure HDInsight Interactive Query Cluster (Hive LLAP)

In dit document wordt de grootte van het HDInsight Interactive Query-cluster (Hive LLAP-cluster) beschreven voor een typische workload om redelijke prestaties te bereiken. Houd er rekening mee dat de aanbevelingen in dit document algemene richtlijnen zijn en dat specifieke workloads mogelijk specifieke afstemming nodig hebben.

Standaard-VM-typen van Azure voor HDInsight Interactive Query Cluster (LLAP)

Soort knooppunt Exemplaar Tekengrootte
Head D13 v2 8 vcpus, 56 GB RAM, 400 GB SSD
Medewerker D14 v2 16 vcpus, 112 GB RAM, 800 GB SSD
ZooKeeper A4 v2 4 vcpus, 8 GB RAM, 40 GB SSD

Opmerking: alle aanbevolen configuratiewaarden zijn gebaseerd op het werkknooppunt van het type D14 v2

Configuration:

Configuratiesleutel Aanbevolen waarde Beschrijving
yarn.nodemanager.resource.memory-mb 102400 (MB) Totaal geheugen dat in MB is opgegeven voor alle YARN-containers op een knooppunt
yarn.scheduler.maximum-allocation-mb 102400 (MB) De maximale toewijzing voor elke containeraanvraag bij de RM, in MB's. Geheugenaanvragen die hoger zijn dan deze waarde, worden niet van kracht
yarn.scheduler.maximum-allocation-vcores 12 Het maximum aantal CPU-kernen voor elke containeraanvraag bij Resource Manager. Aanvragen die hoger zijn dan deze waarde, worden niet van kracht.
yarn.nodemanager.resource.cpu-vcores 12 Aantal CPU-kernen per NodeManager dat kan worden toegewezen voor containers.
yarn.scheduler.capacity.root.llap.capacity 85 (%) YARN-capaciteitstoewijzing voor LLAP-wachtrij
tez.am.resource.memory.mb 4096 (MB) De hoeveelheid geheugen in MB die moet worden gebruikt door de tez AppMaster
hive.server2.tez.sessions.per.default.queue <number_of_worker_nodes> Het aantal sessies voor elke wachtrij met de naam hive.server2.tez.default.queues. Dit getal komt overeen met het aantal querycoördinatoren (Tez-VM's)
hive.tez.container.size 4096 (MB) Opgegeven Tez-containergrootte in MB
hive.llap.daemon.num.executors 19 Aantal uitvoerders per LLAP-daemon
hive.llap.io.threadpool.size 19 Grootte van threadpool voor uitvoerders
hive.llap.daemon.yarn.container.mb 81920 (MB) Totaal geheugen in MB dat wordt gebruikt door afzonderlijke LLAP-daemons (geheugen per daemon)
hive.llap.io.memory.size 242688 (MB) Cachegrootte in MB per LLAP-daemon opgegeven SSD-cache is ingeschakeld
hive.auto.convert.join.noconditionaltask.size 2048 (MB) geheugengrootte in MB om Toewijzingsdeelname uit te voeren

LLAP-architectuur/onderdelen:

`LLAP Architecture/Components`.

Schattingen van de grootte van LLAP-daemon:

1. De totale YARN-geheugentoewijzing voor alle containers op een knooppunt bepalen

Configuratie: yarn.nodemanager.resource.memory-mb

Deze waarde geeft een maximale som van het geheugen in MB aan die door de YARN-containers op elk knooppunt kan worden gebruikt. De opgegeven waarde moet kleiner zijn dan de totale hoeveelheid fysiek geheugen op dat knooppunt.
Totaal geheugen voor alle YARN-containers op een knooppunt = (Totaal fysiek geheugen – geheugen voor OS + Andere services)
Stel deze waarde in op ~90% van de beschikbare RAM-grootte.
Voor D14 v2 is de aanbevolen waarde 102400 MB

2. De maximale hoeveelheid geheugen per YARN-containeraanvraag bepalen

Configuratie: yarn.scheduler.maximum-allocation-mb

Deze waarde geeft de maximale toewijzing aan voor elke containeraanvraag in Resource Manager, in MB. Geheugenaanvragen hoger dan de gespecificeerde waarde zullen geen effect hebben. Resource Manager kan geheugen geven aan containers in stappen van yarn.scheduler.minimum-allocation-mb en kan niet groter zijn dan de grootte die is opgegeven door yarn.scheduler.maximum-allocation-mb. De opgegeven waarde mag niet meer zijn dan het totale aantal opgegeven geheugen voor alle containers op het knooppunt dat is opgegeven door yarn.nodemanager.resource.memory-mb.
Voor D14 v2-werkknooppunten is de aanbevolen waarde 102400 MB

3. De maximale hoeveelheid per vcores YARN-containeraanvraag bepalen

Configuratie: yarn.scheduler.maximum-allocation-vcores

Deze waarde geeft het maximum aantal virtuele CPU-kernen voor elke containeraanvraag in Resource Manager aan. Het aanvragen van vcores een hoger aantal dan wordt deze waarde niet van kracht. Het is een globale eigenschap van de YARN-planner. Voor LLAP-daemoncontainer kan deze waarde worden ingesteld op 75% van de totale beschikbare vcoreswaarde. De resterende 25% moet worden gereserveerd voor NodeManager, DataNode en andere services die worden uitgevoerd op de werkknooppunten.
Er zijn 16 vcores op D14 v2-VM's en 75% van het totaal 16 vcores kan worden gebruikt door llap-daemoncontainer.
Voor D14 v2 is de aanbevolen waarde 12.

4. Aantal gelijktijdige query's

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

Deze configuratiewaarde bepaalt het aantal Tez-sessies dat parallel kan worden gestart. Deze Tez-sessies worden gestart voor elk van de wachtrijen die zijn opgegeven door hive.server2.tez.default.queues. Dit komt overeen met het aantal Tez-VM's (querycoördinatoren). Het is raadzaam om hetzelfde te zijn als het aantal werkknooppunten. Het aantal Tez-VM's kan hoger zijn dan het aantal LLAP-daemonknooppunten. De primaire verantwoordelijkheid van Tez AM is het coördineren van de uitvoering van de query en het toewijzen van fragmenten van het queryplan aan bijbehorende LLAP-daemons voor uitvoering. Bewaar deze waarde als meerdere LLAP-daemonknooppunten om een hogere doorvoer te bereiken.

Standaard HDInsight-cluster heeft vier LLAP-daemons die worden uitgevoerd op vier werkknooppunten, dus de aanbevolen waarde is 4.

Ambari UI-schuifregelaar voor Hive-configuratievariabele hive.server2.tez.sessions.per.default.queue:

`LLAP maximum concurrent queries`.

5. Grootte van Tez-container en Tez-toepassingshoofd

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

tez.am.resource.memory.mb - definieert de grootte van de Tez-toepassingsmaster.
De aanbevolen waarde is 4096 MB.

hive.tez.container.size - definieert de hoeveelheid geheugen die is opgegeven voor Tez-container. Deze waarde moet worden ingesteld tussen de minimale yarn-containergrootte (yarn.scheduler.minimum-allocation-mb) en de maximale yarn-containergrootte (yarn.scheduler.maximum-allocation-mb). De LLAP-daemonuitvoerders gebruiken deze waarde voor het beperken van het geheugengebruik per uitvoerder.
De aanbevolen waarde is 4096 MB.

6. Capaciteitstoewijzing LLAP-wachtrij

Configuratie: yarn.scheduler.capacity.root.llap.capacity

Deze waarde geeft een percentage van de capaciteit aan die aan LLAP-wachtrij wordt gegeven. De capaciteitstoewijzingen kunnen verschillende waarden hebben voor verschillende workloads, afhankelijk van hoe de YARN-wachtrijen zijn geconfigureerd. Als uw workload alleen-lezenbewerkingen heeft, moet u deze instellen als 90% van de capaciteit. Als uw workload echter een combinatie is van update-/verwijder-/samenvoegbewerkingen met beheerde tabellen, is het raadzaam om 85% van de capaciteit voor LLAP-wachtrij te geven. De resterende capaciteit van 15% kan worden gebruikt door andere taken, zoals compressie, enzovoort om containers uit de standaardwachtrij toe te wijzen. Op die manier worden taken in de standaardwachtrij geen yarn-resources onteigend.

Voor D14v2-werkknooppunten is de aanbevolen waarde voor LLAP-wachtrij 85.
(Voor leesworkloads kan deze worden verhoogd tot 90 als geschikt.)

7. LLAP-daemoncontainergrootte

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

LLAP-daemon wordt uitgevoerd als een YARN-container op elk werkknooppunt. De totale geheugengrootte voor llap-daemoncontainer is afhankelijk van de volgende factoren,

  • Configuraties van yarn-containergrootte (yarn.scheduler.minimum-allocation-mb, yarn.scheduler.maximum-allocation-mb, yarn.nodemanager.resource.memory-mb)
  • Aantal Tez-VM's op een knooppunt
  • Totaal geheugen dat is geconfigureerd voor alle containers op een knooppunt en LLAP-wachtrijcapaciteit

Geheugen dat nodig is voor Tez Application Masters (Tez AM) kan als volgt worden berekend.
Tez AM fungeert als een querycoördinator en het aantal Tez-VM's moet worden geconfigureerd op basis van veel gelijktijdige query's die moeten worden uitgevoerd. Theoretisch kunnen we één Tez AM per werkknooppunt overwegen. Het is echter mogelijk dat u meer dan één Tez AM op een werkknooppunt ziet. Voor berekeningsdoeleinden gaan we uit van een uniforme distributie van Tez-VM's op alle LLAP-daemonknooppunten/werkknooppunten. Het is raadzaam om 4 GB geheugen per Tez AM te hebben.

Aantal Tez Ams = waarde opgegeven door Hive config hive.server2.tez.sessions.per.default.queue.
Aantal LLAP-daemonknooppunten = opgegeven door env-variabele num_llap_nodes_for_llap_daemons in de Ambari-gebruikersinterface.
Tez AM-containergrootte = waarde opgegeven door Tez-configuratie tez.am.resource.memory.mb.

Tez AM-geheugen per knooppunt = (ceil(Aantal Tez AMs / Aantal LLAP-daemonknooppunten)x Tez AM-containergrootte**)**
Voor D14 v2 heeft de standaardconfiguratie vier Tez AMs en vier LLAP-daemonknooppunten.
Tez AM-geheugen per knooppunt = (ceil(4/4) x 4 GB) = 4 GB

Het totale geheugen dat beschikbaar is voor LLAP-wachtrij per werkknooppunt kan als volgt worden berekend:
Deze waarde is afhankelijk van de totale hoeveelheid geheugen die beschikbaar is voor alle YARN-containers op een knooppunt (yarn.nodemanager.resource.memory-mb) en het percentage capaciteit dat is geconfigureerd voor LLAP-wachtrij (yarn.scheduler.capacity.root.llap.capacity).
Totaal geheugen voor LLAP-wachtrij op werkknooppunt = Totaal geheugen beschikbaar voor alle YARN-containers op een knooppunt x Percentage capaciteit voor LLAP-wachtrij.
Voor D14 v2 is deze waarde (100 GB x 0,85) = 85 GB.

De GROOTTE van de LLAP-daemoncontainer wordt als volgt berekend;

LLAP-daemoncontainergrootte = (Totaal geheugen voor LLAP-wachtrij op een werkknooppunt) – (Tez AM-geheugen per knooppunt) - (Grootte van de Service Master-container)
Er is slechts één servicemaster (Application Master voor LLAP-service) in het cluster dat is uitgezet op een van de werkknooppunten. Voor berekeningsdoeleinden beschouwen we één servicemaster per werkknooppunt.
Voor D14 v2-werkknooppunt HDI 4.0 - de aanbevolen waarde is (85 GB - 4 GB - 1 GB)) = 80 GB

8. Het aantal uitvoerders per LLAP-daemon bepalen

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

hive.llap.daemon.num.executors:
Deze configuratie bepaalt het aantal uitvoerders dat taken parallel kan uitvoeren per LLAP-daemon. Deze waarde is afhankelijk van het aantal vcores, de hoeveelheid geheugen die per uitvoerprogramma wordt gebruikt en de hoeveelheid geheugen die beschikbaar is voor LLAP-daemoncontainer. Het aantal uitvoerders kan worden overschreven op 120% van de beschikbare vcores per werkknooppunt. Het moet echter worden aangepast als deze niet voldoet aan de geheugenvereisten op basis van het geheugen dat per uitvoerprogramma is vereist en de grootte van de LLAP-daemoncontainer.

Elke uitvoerder is gelijk aan een Tez-container en kan 4 GB (Tez-containergrootte) aan geheugen verbruiken. Alle uitvoerders in LLAP-daemon delen hetzelfde heap-geheugen. Met de veronderstelling dat niet alle uitvoerders tegelijkertijd geheugenintensieve bewerkingen uitvoeren, kunt u 75% van de Tez-containergrootte (4 GB) per uitvoerder overwegen. Op deze manier kunt u het aantal uitvoerders verhogen door elke uitvoerder minder geheugen (bijvoorbeeld 3 GB) te geven voor verhoogde parallelle uitvoering. Het is echter raadzaam deze instelling af te stemmen voor uw doelworkload.

Er zijn 16 vcores op D14 v2-VM's. Voor D14 v2 is de aanbevolen waarde voor het aantal uitvoerders (16 vcores x 120%) ~= 19 op elk werkknooppunt met 3 GB per uitvoerder.

hive.llap.io.threadpool.size:
Met deze waarde wordt de grootte van de threadpool voor uitvoerders opgegeven. Omdat uitvoerders zijn gerepareerd zoals opgegeven, is dit hetzelfde als het aantal uitvoerders per LLAP-daemon.
Voor D14 v2 is de aanbevolen waarde 19.

9. De grootte van de LLAP-daemoncache bepalen

Configuratie: hive.llap.io.memory.size

LLAP-daemoncontainergeheugen bestaat uit de volgende onderdelen;

  • Hoofdkamer
  • Heap-geheugen gebruikt door uitvoerders (Xmx)
  • Cache in het geheugen per daemon (de grootte van het off-heap-geheugen, niet van toepassing wanneer SSD-cache is ingeschakeld)
  • Metagegevensgrootte van cache in het geheugen (alleen van toepassing wanneer SSD-cache is ingeschakeld)

Grootte van hoofdruimte: deze grootte geeft een deel aan van heapgeheugen dat wordt gebruikt voor overhead van Java-VM's (metaspace, threads-stack, gc gegevensstructuren, enzovoort). Over het algemeen is deze overhead ongeveer 6% van de heapgrootte (Xmx). Als u zich aan de veiligere kant wilt bevinden, kan deze waarde worden berekend als 6% van de totale llap-daemongeheugengrootte.
Voor D14 v2 is de aanbevolen waarde ceil(80 GB x 0,06) ~= 4 GB.

Heapgrootte (Xmx): het is de hoeveelheid heap-geheugen die beschikbaar is voor alle uitvoerders. Totale Heap-grootte = Aantal uitvoerders x 3 GB
Voor D14 v2 is deze waarde 19 x 3 GB = 57 GB

Ambari environment variable for LLAP heap size:

`LLAP heap size`.

Als SSD-cache is uitgeschakeld, is het geheugen in de cache de hoeveelheid geheugen die overblijft nadat Headroom-grootte en Heap-grootte zijn verwijderd uit de containergrootte van de LLAP-daemon.

Berekening van cachegrootte verschilt wanneer SSD-cache is ingeschakeld. Het instellen van hive.llap.io.allocator.mmap = true maakt SSD-caching mogelijk. Wanneer SSD-cache is ingeschakeld, wordt een deel van het geheugen gebruikt voor het opslaan van metagegevens voor de SSD-cache. De metagegevens worden opgeslagen in het geheugen en zijn naar verwachting ~8% van de SSD-cachegrootte.
Grootte van metagegevens van SSD-cache in het geheugen = LLAP-daemoncontainergrootte - (headroom + heapgrootte)
Voor D14 v2, met HDI 4.0, metagegevensgrootte van SSD-cache in het geheugen = 80 GB - (4 GB + 57 GB) = 19 GB

Gezien de grootte van het beschikbare geheugen voor het opslaan van metagegevens van SSD-cache, kunnen we de grootte van de SSD-cache berekenen die kan worden ondersteund.
Grootte van metagegevens in het geheugen voor SSD-cache = LLAP-daemoncontainergrootte - (Hoofdruimte + Heap-grootte) = 19 GB
Grootte van SSD-cache = grootte van metagegevens in het geheugen voor SSD-cache (19 GB) / 0,08 (8 procent)

Voor D14 v2 en HDI 4.0, de aanbevolen SSD-cachegrootte = 19 GB / 0,08 ~= 237 GB

10. Geheugen voor kaartdeelname aanpassen

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

Zorg ervoor dat hive.auto.convert.join.nocondition querysk is ingeschakeld om deze parameter van kracht te laten worden. Deze configuratie bepaalt de drempelwaarde voor MapJoin-selectie door Hive Optimizer die rekening houdt met oversubscriptie van geheugen van andere uitvoerders, zodat er meer ruimte is voor hashtabellen in het geheugen om meer conversies van toewijzingsdeelnames toe te staan. Rekening houdend met 3 GB per uitvoerder, kan deze grootte worden overschreven op 3 GB, maar sommige heapgeheugen kan ook worden gebruikt voor sorteerbuffers, shuffle buffers, enzovoort door de andere bewerkingen.
Voor D14 v2, met 3 GB geheugen per uitvoerder, is het raadzaam deze waarde in te stellen op 2048 MB.

(Opmerking: Deze waarde heeft mogelijk aanpassingen nodig die geschikt zijn voor uw workload. Als u deze waarde te laag instelt, wordt de functie voor automatischconverten mogelijk niet gebruikt. En als u deze te hoog instelt, kan dit leiden tot onvoldoende geheugenuitzonderingen of GC-pauzes die tot ongunstige prestaties kunnen leiden.)

11. Aantal LLAP-daemons

Ambari-omgevingsvariabelen: num_llap_nodes, num_llap_nodes_for_llap_daemons

num_llap_nodes: hiermee geeft u het aantal knooppunten op dat wordt gebruikt door de Hive LLAP-service. Dit omvat knooppunten met LLAP-daemon, LLAP-servicemaster en Tez Application Master (Tez AM).

`Number of Nodes for LLAP service`.
num_llap_nodes_for_llap_daemons - opgegeven aantal knooppunten dat alleen wordt gebruikt voor LLAP-daemons. LLAP-daemoncontainergrootten zijn ingesteld op maximaal passend knooppunt, dus dit resulteert in één llap daemon op elk knooppunt.

`Number of Nodes for LLAP daemons`.

Het is raadzaam om beide waarden hetzelfde te houden als het aantal werkknooppunten in het Interactive Query-cluster.

Overwegingen voor workloadbeheer

Als u workloadbeheer voor LLAP wilt inschakelen, moet u ervoor zorgen dat u voldoende capaciteit reserveert om werkbelastingbeheer te laten functioneren zoals verwacht. Het workloadbeheer vereist configuratie van een aangepaste YARN-wachtrij, naast llap de wachtrij. Zorg ervoor dat u de totale capaciteit van clusterresources verdeelt tussen llap wachtrij- en workloadbeheerwachtrij in overeenstemming met uw workloadvereisten. Met workloadbeheer worden Tez-toepassingsmodellen (Tez-VM's) geactiveerd wanneer een resourceplan wordt geactiveerd.

Opmerking:

  • Tez-VM's die zijn geactiveerd door het activeren van een resourceplan verbruiken resources uit de wachtrij voor workloadbeheer, zoals opgegeven door hive.server2.tez.interactive.queue.
  • Het aantal Tez-VM's is afhankelijk van de waarde die QUERY_PARALLELISM is opgegeven in het resourceplan.
  • Zodra het workloadbeheer actief is, worden Tez-VM's in de LLAP-wachtrij niet gebruikt. Alleen Tez-VM's uit de wachtrij voor workloadbeheer worden gebruikt voor querycoördinatie. Tez-VM's in de llap wachtrij worden gebruikt wanneer workloadbeheer is uitgeschakeld.

Bijvoorbeeld: Totale clustercapaciteit = 100 GB geheugen, verdeeld over LLAP, Workloadbeheer en Standaardwachtrijen als volgt:

  • CAPACITEIT VAN LLAP-wachtrij = 70 GB
  • Capaciteit van workloadbeheerwachtrij = 20 GB
  • Standaardwachtrijcapaciteit = 10 GB

Met een capaciteit van 20 GB in de wachtrijcapaciteit voor workloadbeheer kan een resourceplan waarde opgeven QUERY_PARALLELISM als vijf, wat betekent dat workloadbeheer vijf Tez-VM's met elk een containergrootte van 4 GB kan starten. Als QUERY_PARALLELISM de capaciteit hoger is dan de capaciteit, reageren sommige Tez-VM's mogelijk niet ACCEPTED meer in de status. De Hive-server 2 Interactive kan geen queryfragmenten verzenden naar de Tez-VM's die niet de status hebben RUNNING .

Volgende stappen 

Als het instellen van deze waarden uw probleem niet heeft opgelost, gaat u naar een van de volgende...