Apache Hive optimaliseren met Apache Ambari in Azure HDInsight

Apache Ambari is een webinterface voor het beheren en bewaken van HDInsight-clusters. Zie HDInsight-clusters beheren met behulp van de Apache Ambari-webinterface voor een inleiding tot de Ambari-webinterface.

In de volgende secties worden configuratieopties beschreven voor het optimaliseren van de algehele Prestaties van Apache Hive.

  1. Als u hive-configuratieparameters wilt wijzigen, selecteert u Hive in de zijbalk services.
  2. Navigeer naar het tabblad Configuraties .

De Hive-uitvoeringsengine instellen

Hive biedt twee uitvoeringsengines: Apache Hadoop MapReduce en Apache TEZ. Tez is sneller dan MapReduce. HDInsight Linux-clusters hebben Tez als de standaarduitvoeringsengine. De uitvoeringsengine wijzigen:

  1. Typ op het tabblad Hive-configuraties de uitvoeringsengine in het filtervak.

    Apache Ambari Search execution engine.

  2. De standaardwaarde van de eigenschap Optimalisatie is Tez.

    Optimization - Apache Tez engine.

Mappers afstemmen

Hadoop probeert één bestand op te splitsen (toewijzen) in meerdere bestanden en de resulterende bestanden parallel te verwerken. Het aantal mappers is afhankelijk van het aantal splitsingen. Met de volgende twee configuratieparameters wordt het aantal splitsingen voor de Tez-uitvoeringsengine bepaald:

  • tez.grouping.min-size: Ondergrens voor de grootte van een gegroepeerde splitsing, met een standaardwaarde van 16 MB (16.777.216 bytes).
  • tez.grouping.max-size: Bovengrens voor de grootte van een gegroepeerde splitsing, met een standaardwaarde van 1 GB (1.073.741.824 bytes).

Als prestatierichtlijn verlaagt u beide parameters om de latentie te verbeteren, verhoogt u de doorvoer voor meer doorvoer.

Als u bijvoorbeeld vier toewijzingstaken wilt instellen voor een gegevensgrootte van 128 MB, stelt u beide parameters in op elk 32 MB (33.554.432 bytes).

  1. Als u de limietparameters wilt wijzigen, gaat u naar het tabblad Configuraties van de Tez-service. Vouw het deelvenster Algemeen uit en zoek de tez.grouping.max-size en tez.grouping.min-size parameters.

  2. Stel beide parameters in op 33.554.432 bytes (32 MB).

    Apache Ambari Tez grouping sizes.

Deze wijzigingen zijn van invloed op alle Tez-taken op de server. Als u een optimaal resultaat wilt krijgen, kiest u de juiste parameterwaarden.

Reducers afstemmen

Apache ORC en Snappy bieden beide hoge prestaties. Hive kan echter standaard te weinig reducers hebben, wat knelpunten veroorzaakt.

Stel dat u een invoergegevensgrootte van 50 GB hebt. Deze gegevens in ORC-indeling met Snappy-compressie zijn 1 GB. Hive schat het aantal reducers dat nodig is als: (aantal bytes invoer aan mappers / hive.exec.reducers.bytes.per.reducer).

Met de standaardinstellingen is dit voorbeeld vier reducers.

De hive.exec.reducers.bytes.per.reducer parameter geeft het aantal bytes op dat per reducer wordt verwerkt. De standaardwaarde is 64 MB. Het afstemmen van deze waarde verhoogt parallelle uitvoering en kan de prestaties verbeteren. Het afstemmen ervan kan ook te veel reducers produceren, mogelijk nadelig voor de prestaties. Deze parameter is gebaseerd op uw specifieke gegevensvereisten, compressie-instellingen en andere omgevingsfactoren.

  1. Als u de parameter wilt wijzigen, gaat u naar het tabblad Hive-configuraties en zoekt u de parameter Data per Reducer op de pagina Instellingen.

    Apache Ambari Data per Reducer.

  2. Selecteer Bewerken om de waarde te wijzigen in 128 MB (134.217.728 bytes) en druk op Enter om op te slaan.

    Ambari Data per Reducer - edited.

    Gezien een invoergrootte van 1024 MB, met 128 MB aan gegevens per reducer, zijn er acht reducers (1024/128).

  3. Een onjuiste waarde voor de parameter Data per Reducer kan leiden tot een groot aantal reducers, wat de queryprestaties nadelig beïnvloedt. Als u het maximum aantal reducers wilt beperken, stelt u deze in hive.exec.reducers.max op een geschikte waarde. De standaardwaarde is 1009.

Parallelle uitvoering inschakelen

Een Hive-query wordt uitgevoerd in een of meer fasen. Als de onafhankelijke fasen parallel kunnen worden uitgevoerd, zal dit de queryprestaties verbeteren.

  1. Als u parallelle uitvoering van query's wilt inschakelen, gaat u naar het tabblad Hive Config en zoekt u naar de hive.exec.parallel eigenschap. De standaardwaarde is false. Wijzig de waarde in waar en druk op Enter om de waarde op te slaan.

  2. Als u het aantal taken dat parallel moet worden uitgevoerd, wilt beperken, wijzigt u de hive.exec.parallel.thread.number eigenschap. De standaardwaarde is 8.

    Apache Hive exec parallel display.

Vectorisatie inschakelen

Hive verwerkt gegevensrij per rij. Vectorization leidt Hive om gegevens te verwerken in blokken van 1024 rijen in plaats van één rij tegelijk. Vectorisatie is alleen van toepassing op de ORC-bestandsindeling.

  1. Als u een gevectoriseerde queryuitvoering wilt inschakelen, gaat u naar het tabblad Hive-configuraties en zoekt u naar de hive.vectorized.execution.enabled parameter. De standaardwaarde is waar voor Hive 0.13.0 of hoger.

  2. Als u gevectoriseerde uitvoering wilt inschakelen voor de reductiezijde van de query, stelt u de hive.vectorized.execution.reduce.enabled parameter in op true. De standaardwaarde is false.

    Apache Hive vectorized execution.

Optimalisatie op basis van kosten inschakelen (CBO)

Hive volgt standaard een set regels om één optimaal queryuitvoeringsplan te vinden. Optimalisatie op basis van kosten (CBO) evalueert meerdere plannen om een query uit te voeren. En wijst een kosten toe aan elk abonnement en bepaalt vervolgens het goedkoopste plan om een query uit te voeren.

Als u CBO wilt inschakelen, gaat u naar Hive-configuraties>> Instellingen en zoekt u Enable Cost Based Optimizer en schakelt u vervolgens de wisselknop in op Aan.

HDInsight cost-based optimizer.

De volgende aanvullende configuratieparameters verhogen de Hive-queryprestaties wanneer CBO is ingeschakeld:

  • hive.compute.query.using.stats

    Als deze is ingesteld op waar, gebruikt Hive statistieken die zijn opgeslagen in de metastore om eenvoudige query's zoals count(*)te beantwoorden.

    Apache Hive compute query using stats.

  • hive.stats.fetch.column.stats

    Kolomstatistieken worden gemaakt wanneer CBO is ingeschakeld. Hive maakt gebruik van kolomstatistieken, die zijn opgeslagen in metastore, om query's te optimaliseren. Het ophalen van kolomstatistieken voor elke kolom duurt langer wanneer het aantal kolommen hoog is. Als deze instelling is ingesteld op false, wordt het ophalen van kolomstatistieken uit de metastore uitgeschakeld.

    Apache Hive stats set column stats.

  • hive.stats.fetch.partition.stats

    Basispartitiestatistieken, zoals het aantal rijen, de gegevensgrootte en de bestandsgrootte, worden opgeslagen in metastore. Als deze optie is ingesteld op true, worden de partitiestatistieken opgehaald uit metastore. Als dit onwaar is, wordt de bestandsgrootte opgehaald uit het bestandssysteem. En het aantal rijen wordt opgehaald uit het rijschema.

    Hive stats set partition stats.

Raadpleeg het blogbericht op basis van Hive Cost Based Optimization in Analytics op Azure Blog voor meer informatie

Tussenliggende compressie inschakelen

Toewijzingstaken maken tussenliggende bestanden die worden gebruikt door de reducer-taken. Tussenliggende compressie verkleint de tussenliggende bestandsgrootte.

Hadoop-taken zijn meestal Knelpunten in I/O. Het comprimeren van gegevens kan I/O en de algehele netwerkoverdracht versnellen.

De beschikbare compressietypen zijn:

Indeling Hulpprogramma Algoritme Bestandsextensie Splitsbaar?
Gzip Gzip DEFLATE .gz Nee
Bzip2 Bzip2 Bzip2 .bz2 Ja
LZO Lzop LZO .lzo Ja, indien geïndexeerd
Snappy N.v.t. Snappy Snappy Nee

Over het algemeen is het belangrijk om de compressiemethode te splitsen, anders worden er maar weinig mappers gemaakt. Als de invoergegevens tekst zijn, bzip2 is dit de beste optie. Voor ORC-indeling is Snappy de snelste compressieoptie.

  1. Als u tussenliggende compressie wilt inschakelen, gaat u naar het tabblad Hive-configuraties en stelt u de hive.exec.compress.intermediate parameter in op true. De standaardwaarde is false.

    `Hive exec compress intermediate`.

    Notitie

    Als u tussenliggende bestanden wilt comprimeren, kiest u een compressiecodec met lagere CPU-kosten, zelfs als de codec geen hoge compressie-uitvoer heeft.

  2. Als u de tussenliggende compressiecodec wilt instellen, voegt u de aangepaste eigenschap mapred.map.output.compression.codec toe aan het hive-site.xml of mapred-site.xml bestand.

  3. Een aangepaste instelling toevoegen:

    a. Navigeer naar Hive>Configs>Advanced>Custom Hive-site.

    b. Selecteer Eigenschap toevoegen... onderaan het deelvenster Aangepaste hive-site.

    c. Voer mapred.map.output.compression.codec in het venster Eigenschap toevoegen de sleutel en org.apache.hadoop.io.compress.SnappyCodec als de waarde in.

    d. Selecteer Toevoegen.

    `Apache Hive custom property add`.

    Met deze instelling wordt het tussenliggende bestand gecomprimeerd met snappy-compressie. Zodra de eigenschap is toegevoegd, wordt deze weergegeven in het deelvenster Aangepaste hive-site.

    Notitie

    Met deze procedure wordt het $HADOOP_HOME/conf/hive-site.xml bestand gewijzigd.

Uiteindelijke uitvoer comprimeren

De uiteindelijke Hive-uitvoer kan ook worden gecomprimeerd.

  1. Als u de uiteindelijke Hive-uitvoer wilt comprimeren, gaat u naar het tabblad Hive-configuraties en stelt u de hive.exec.compress.output parameter in op true. De standaardwaarde is false.

  2. Als u de codec voor uitvoercompressie wilt kiezen, voegt u de mapred.output.compression.codec aangepaste eigenschap toe aan het deelvenster Aangepaste hive-site, zoals beschreven in stap 3 van de vorige sectie.

    Apache Hive custom property add2.

Speculatieve uitvoering inschakelen

Speculatieve uitvoering start een bepaald aantal dubbele taken om de traag uitgevoerde taaktracker te detecteren en te weigeren. Terwijl u de algehele taakuitvoering verbetert door afzonderlijke taakresultaten te optimaliseren.

Speculatieve uitvoering mag niet worden ingeschakeld voor langlopende MapReduce-taken met grote hoeveelheden invoer.

  • Als u speculatieve uitvoering wilt inschakelen, gaat u naar het tabblad Hive-configuraties en stelt u de hive.mapred.reduce.tasks.speculative.execution parameter in op waar. De standaardwaarde is false.

    `Hive mapred reduce tasks speculative execution`.

Dynamische partities afstemmen

Met Hive kunnen dynamische partities worden gemaakt bij het invoegen van records in een tabel, zonder dat elke partitie vooraf wordt gedefinieerd. Deze mogelijkheid is een krachtige functie. Hoewel dit kan leiden tot het maken van een groot aantal partities. En een groot aantal bestanden voor elke partitie.

  1. Voor Hive om dynamische partities uit te voeren, moet de hive.exec.dynamic.partition parameterwaarde waar zijn (de standaardwaarde).

  2. Wijzig de dynamische partitiemodus in strikt. In de strikte modus moet ten minste één partitie statisch zijn. Met deze instelling voorkomt u query's zonder partitiefilter in de WHERE-component, dat wil gezegd, strikt voorkomt u query's die alle partities scannen. Navigeer naar het tabblad Hive-configuraties en stel deze in op hive.exec.dynamic.partition.mode strikt. De standaardwaarde is niet ingewikkeld.

  3. Als u het aantal dynamische partities wilt beperken dat moet worden gemaakt, wijzigt u de hive.exec.max.dynamic.partitions parameter. De standaardwaarde is 5000.

  4. Als u het totale aantal dynamische partities per knooppunt wilt beperken, wijzigt hive.exec.max.dynamic.partitions.pernodeu . De standaardwaarde is 2000.

Lokale modus inschakelen

Met de lokale modus kan Hive alle taken van een taak op één computer uitvoeren. Of soms in één proces. Deze instelling verbetert de queryprestaties als de invoergegevens klein zijn. En de overhead van het starten van taken voor query's verbruikt een aanzienlijk percentage van de algehele uitvoering van query's.

Als u de lokale modus wilt inschakelen, voegt u de hive.exec.mode.local.auto parameter toe aan het deelvenster Aangepaste hive-site, zoals wordt uitgelegd in stap 3 van de sectie Tussenliggende compressie inschakelen.

Apache Hive exec mode local auto.

Eén MapReduce MultiGROUP BY instellen

Wanneer deze eigenschap is ingesteld op true, genereert een MultiGROUP BY-query met algemene group-by-sleutels één MapReduce-taak.

Als u dit gedrag wilt inschakelen, voegt u de hive.multigroupby.singlereducer parameter toe aan het deelvenster Aangepaste hive-site, zoals wordt uitgelegd in stap 3 van de sectie Tussenliggende compressie inschakelen.

Hive set single MapReduce MultiGROUP BY.

Aanvullende Hive-optimalisaties

In de volgende secties worden aanvullende Hive-gerelateerde optimalisaties beschreven die u kunt instellen.

Join-optimalisaties

Het standaard jointype in Hive is een shuffle join. In Hive lezen speciale mappers de invoer en verzenden een joinsleutel/waardepaar naar een tussenliggend bestand. Hadoop sorteert en voegt deze paren samen in een willekeurige fase. Deze willekeurige fase is duur. Als u de juiste join selecteert op basis van uw gegevens, kunt u de prestaties aanzienlijk verbeteren.

Jointype Wanneer Hoe Hive-instellingen Opmerkingen
Join in willekeurige volgorde
  • Standaardkeuze
  • Werkt altijd
  • Leesbewerkingen uit een deel van een van de tabellen
  • Buckets en sorteringen op joinsleutel
  • Eén bucket naar elke reductie verzenden
  • Deelnemen wordt gedaan aan de zijde van Reduce
Er is geen significante Hive-instelling nodig Werkt elke keer
Kaartdeelname
  • Eén tabel kan in het geheugen passen
  • Leest kleine tabel in de hash-tabel van het geheugen
  • Streamt door een deel van het grote bestand
  • Hiermee wordt elke record samengevoegd vanuit een hash-tabel
  • Joins zijn alleen door de mapper
hive.auto.confvert.join=true Snel, maar beperkt
Samenvoegingsbucket sorteren Als beide tabellen zijn:
  • Hetzelfde gesorteerd
  • Bucketed hetzelfde
  • Samenvoegen op de gesorteerde/bucketed kolom
Elk proces:
  • Leest een bucket uit elke tabel
  • De rij met de laagste waarde verwerkt
hive.auto.convert.sortmerge.join=true Efficiënt

Optimalisaties van uitvoeringsengines

Aanvullende aanbevelingen voor het optimaliseren van de Hive-uitvoeringsengine:

Instelling Aanbevolen HDInsight-standaard
hive.mapjoin.hybridgrace.hashtable True = veiliger, langzamer; false = sneller false
tez.am.resource.memory.mb 4 GB bovengrens voor de meeste Automatisch afgestemd
tez.session.am.dag.submit.timeout.secs 300+ 300
tez.am.container.idle.release-timeout-min.millis 20000+ 10000
tez.am.container.idle.release-timeout-max.millis 40000+ 20000

Volgende stappen