Dela via


Optimera Apache Hive med Apache Ambari i Azure HDInsight

Apache Ambari är ett webbgränssnitt för att hantera och övervaka HDInsight-kluster. En introduktion till Ambari-webbgränssnittet finns i Hantera HDInsight-kluster med apache Ambari-webbgränssnittet.

I följande avsnitt beskrivs konfigurationsalternativ för att optimera övergripande Apache Hive-prestanda.

  1. Om du vill ändra Hive-konfigurationsparametrar väljer du Hive i sidofältet Tjänster.
  2. Gå till fliken Konfigurationer .

Ange Hive-körningsmotorn

Hive har två körningsmotorer: Apache Hadoop MapReduce och Apache TEZ. Tez är snabbare än MapReduce. HDInsight Linux-kluster har Tez som standardkörningsmotor. Så här ändrar du körningsmotorn:

  1. På fliken Hive-konfigurationer skriver du körningsmotorn i filterrutan.

    Apache Ambari Search execution engine.

  2. Optimeringsegenskapens standardvärde är Tez.

    Optimization - Apache Tez engine.

Finjustera mappare

Hadoop försöker dela upp (mappa) en enskild fil i flera filer och bearbeta de resulterande filerna parallellt. Antalet mappningar beror på antalet delningar. Följande två konfigurationsparametrar styr antalet delningar för Tez-körningsmotorn:

  • tez.grouping.min-size: Lägre gräns för storleken på en grupperad delning med ett standardvärde på 16 MB (16 777 216 byte).
  • tez.grouping.max-size: Övre gräns för storleken på en grupperad delning med ett standardvärde på 1 GB (1 073 741 824 byte).

Som en prestandaguide sänker du båda dessa parametrar för att förbättra svarstiden, öka för mer dataflöde.

Om du till exempel vill ange fyra mappningsuppgifter för en datastorlek på 128 MB anger du båda parametrarna till 32 MB vardera (33 554 432 byte).

  1. Om du vill ändra gränsparametrarna går du till fliken Konfigurationer i Tez-tjänsten. Expandera panelen Allmänt och leta upp parametrarna tez.grouping.max-size och tez.grouping.min-size .

  2. Ange båda parametrarna till 33 554 432 byte (32 MB).

    Apache Ambari Tez grouping sizes.

Dessa ändringar påverkar alla Tez-jobb på servern. Välj lämpliga parametervärden för att få ett optimalt resultat.

Finjustera reducers

Både Apache ORC och Snappy har höga prestanda. Hive kan dock ha för få reducers som standard, vilket orsakar flaskhalsar.

Anta till exempel att du har en indatastorlek på 50 GB. Dessa data i ORC-format med Snappy-komprimering är 1 GB. Hive uppskattar antalet reducers som behövs som: (antal byteindata till mappare/ hive.exec.reducers.bytes.per.reducer).

Med standardinställningarna är det här exemplet fyra reducers.

Parametern hive.exec.reducers.bytes.per.reducer anger antalet byte som bearbetas per reducer. Standardvärdet är 64 MB. Om du justerar ned det här värdet ökar parallelliteten och kan förbättra prestandan. Att justera den för lågt kan också ge för många reducers, vilket kan påverka prestanda negativt. Den här parametern baseras på dina specifika datakrav, komprimeringsinställningar och andra miljöfaktorer.

  1. Om du vill ändra parametern går du till fliken Hive-konfigurationer och letar reda på parametern Data per reducer på sidan Inställningar.

    Apache Ambari Data per Reducer.

  2. Välj Redigera för att ändra värdet till 128 MB (134 217 728 byte) och tryck sedan på Retur för att spara.

    Ambari Data per Reducer - edited.

    Med en indatastorlek på 1 024 MB, med 128 MB data per reducer, finns det åtta reducers (1024/128).

  3. Ett felaktigt värde för parametern Data per Reducer kan resultera i ett stort antal reducers, vilket påverkar frågeprestandan negativt. Om du vill begränsa det maximala antalet reducers anger du hive.exec.reducers.max till ett lämpligt värde. Standardvärdet är 1009.

Aktivera parallell körning

En Hive-fråga körs i ett eller flera steg. Om de oberoende stegen kan köras parallellt ökar frågeprestandan.

  1. Om du vill aktivera parallell frågekörning går du till fliken Hive Config och söker hive.exec.parallel efter egenskapen. Standardvärdet är "false". Ändra värdet till true och tryck sedan på Retur för att spara värdet.

  2. Ändra egenskapen om du vill begränsa antalet jobb som ska köras parallellt hive.exec.parallel.thread.number . Standardvärdet är 8.

    Apache Hive exec parallel display.

Aktivera vektorisering

Hive bearbetar data rad för rad. Vektorisering dirigerar Hive till att bearbeta data i block med 1 024 rader i stället för en rad i taget. Vektorisering gäller endast för ORC-filformatet.

  1. Om du vill aktivera en vektoriserad frågekörning går du till fliken Hive-konfigurationer och söker efter parameternhive.vectorized.execution.enabled. Standardvärdet är sant för Hive 0.13.0 eller senare.

  2. Om du vill aktivera vektoriserad körning för reduce-sidan av frågan anger du parametern hive.vectorized.execution.reduce.enabled till true. Standardvärdet är "false".

    Apache Hive vectorized execution.

Aktivera kostnadsbaserad optimering (CBO)

Som standard följer Hive en uppsättning regler för att hitta en optimal frågekörningsplan. Kostnadsbaserad optimering (CBO) utvärderar flera planer för att köra en fråga. Och tilldelar en kostnad till varje plan och bestämmer sedan den billigaste planen för att köra en fråga.

Om du vill aktivera CBO går du till Hive>Configs> Inställningar och letar reda på Aktivera kostnadsbaserad optimerare och växlar sedan växlingsknappen till På.

HDInsight cost-based optimizer.

Följande ytterligare konfigurationsparametrar ökar Hive-frågeprestanda när CBO är aktiverat:

  • hive.compute.query.using.stats

    När värdet är true använder Hive statistik som lagras i metaarkivet för att besvara enkla frågor som count(*).

    Apache Hive compute query using stats.

  • hive.stats.fetch.column.stats

    Kolumnstatistik skapas när CBO är aktiverat. Hive använder kolumnstatistik, som lagras i metaarkivet, för att optimera frågor. Det tar längre tid att hämta kolumnstatistik för varje kolumn när antalet kolumner är högt. När värdet är falskt inaktiverar den här inställningen hämtning av kolumnstatistik från metaarkivet.

    Apache Hive stats set column stats.

  • hive.stats.fetch.partition.stats

    Grundläggande partitionsstatistik, till exempel antal rader, datastorlek och filstorlek, lagras i metaarkivet. Om värdet är true hämtas partitionsstatistiken från metaarkivet. När det är falskt hämtas filstorleken från filsystemet. Och antalet rader hämtas från radschemat.

    Hive stats set partition stats.

Mer information finns i blogginlägget om kostnadsbaserad optimering i Hive i Analytics på Azure-bloggen

Aktivera mellanliggande komprimering

Mappningsuppgifter skapar mellanliggande filer som används av reduceruppgifterna. Mellanliggande komprimering krymper den mellanliggande filstorleken.

Hadoop-jobb är vanligtvis I/O-flaskhalsar. Komprimering av data kan påskynda I/O och övergripande nätverksöverföring.

Tillgängliga komprimeringstyper är:

Format Verktyg Algoritm Filnamnstillägg Splittable?
Gzip Gzip TÖMMA .gz Nej
Bzip2 Bzip2 Bzip2 .bz2 Ja
LZO Lzop LZO .lzo Ja, om indexeras
Snappy Ej tillämpligt Snappy Snappy Nej

Som en allmän regel är det viktigt att ha delningstabellen för komprimeringsmetoden, annars skapas få mappare. Om indata är text bzip2 är det bästa alternativet. För ORC-format är Snappy det snabbaste komprimeringsalternativet.

  1. Om du vill aktivera mellanliggande komprimering går du till fliken Hive-konfigurationer och anger sedan parametern hive.exec.compress.intermediate till true. Standardvärdet är "false".

    `Hive exec compress intermediate`.

    Kommentar

    Om du vill komprimera mellanliggande filer väljer du en komprimeringskodc med lägre CPU-kostnad, även om codec inte har höga komprimeringsutdata.

  2. Om du vill ange den mellanliggande komprimeringskodcen lägger du till den anpassade egenskapen mapred.map.output.compression.codec i hive-site.xml filen eller mapred-site.xml .

  3. Så här lägger du till en anpassad inställning:

    a. Gå till Hive>Configs>Advanced>Custom hive-site.

    b. Välj Lägg till egenskap... längst ned i fönstret Anpassad hive-site.

    c. I fönstret Lägg till egenskap anger du mapred.map.output.compression.codec som nyckel och org.apache.hadoop.io.compress.SnappyCodec som värde.

    d. Markera Lägga till.

    `Apache Hive custom property add`.

    Den här inställningen komprimerar den mellanliggande filen med snappy-komprimering. När egenskapen har lagts till visas den i fönstret Anpassad hive-site.

    Kommentar

    Den här proceduren ändrar $HADOOP_HOME/conf/hive-site.xml filen.

Komprimera slutliga utdata

De slutliga Hive-utdata kan också komprimeras.

  1. Om du vill komprimera de sista Hive-utdata går du till fliken Hive-konfigurationer och anger sedan parametern hive.exec.compress.output till true. Standardvärdet är "false".

  2. Om du vill välja utdatakomprimeringskodc lägger du till den mapred.output.compression.codec anpassade egenskapen i fönstret Anpassad hive-site enligt beskrivningen i föregående avsnitts steg 3.

    Apache Hive custom property add2.

Aktivera spekulativ körning

Spekulativ körning startar ett visst antal duplicerade uppgifter för att identifiera och neka en lista över den långsamma aktivitetsspåraren. Samtidigt som du förbättrar den övergripande jobbkörningen genom att optimera enskilda aktivitetsresultat.

Spekulativ körning bör inte aktiveras för långvariga MapReduce-uppgifter med stora mängder indata.

  • Om du vill aktivera spekulativ körning navigerar du till fliken Hive-konfigurationer och anger sedan parametern hive.mapred.reduce.tasks.speculative.execution till true. Standardvärdet är "false".

    `Hive mapred reduce tasks speculative execution`.

Justera dynamiska partitioner

Hive gör det möjligt att skapa dynamiska partitioner när du infogar poster i en tabell, utan att fördefinierade varje partition. Den här möjligheten är en kraftfull funktion. Även om det kan leda till att ett stort antal partitioner skapas. Och ett stort antal filer för varje partition.

  1. För att Hive ska kunna göra dynamiska partitioner hive.exec.dynamic.partition ska parametervärdet vara sant (standardvärdet).

  2. Ändra läget för dynamisk partition till strikt. I strikt läge måste minst en partition vara statisk. Den här inställningen förhindrar frågor utan partitionsfiltret i WHERE-satsen, d.v.s. strikt förhindrar frågor som genomsöker alla partitioner. Gå till fliken Hive-konfigurationer och ange hive.exec.dynamic.partition.mode sedan till strikt. Standardvärdet är icke-avgränsat.

  3. Ändra parametern om du vill begränsa antalet dynamiska partitioner som ska skapas hive.exec.max.dynamic.partitions . Standardvärdet är 5 000.

  4. Om du vill begränsa det totala antalet dynamiska partitioner per nod ändrar du hive.exec.max.dynamic.partitions.pernode. Standardvärdet är 2000.

Aktivera lokalt läge

Med lokalt läge kan Hive utföra alla uppgifter i ett jobb på en enda dator. Eller ibland i en enda process. Den här inställningen förbättrar frågeprestanda om indata är små. Och kostnaden för att starta uppgifter för frågor förbrukar en betydande procentandel av den totala frågekörningen.

Om du vill aktivera lokalt läge lägger du till parametern hive.exec.mode.local.auto i panelen Anpassad hive-site enligt beskrivningen i steg 3 i avsnittet Aktivera mellanliggande komprimering .

Apache Hive exec mode local auto.

Ange enkel MapReduce MultiGROUP BY

När den här egenskapen är inställd på true genererar en MultiGROUP BY-fråga med vanliga grupp-by-nycklar ett enda MapReduce-jobb.

Om du vill aktivera det här beteendet lägger du till parametern hive.multigroupby.singlereducer i fönstret Anpassad hive-site enligt beskrivningen i steg 3 i avsnittet Aktivera mellanliggande komprimering .

Hive set single MapReduce MultiGROUP BY.

Ytterligare Hive-optimeringar

I följande avsnitt beskrivs ytterligare Hive-relaterade optimeringar som du kan ange.

Kopplingsoptimeringar

Standardanslutningstypen i Hive är en shuffle-koppling. I Hive läser särskilda mappare indata och genererar ett kopplingsnyckel/värde-par till en mellanliggande fil. Hadoop sorterar och sammanfogar dessa par i en shuffle-fas. Den här shuffle-fasen är dyr. Om du väljer rätt koppling baserat på dina data kan prestandan förbättras avsevärt.

Kopplingstyp När Hur Hive-inställningar Kommentarer
Blanda koppling
  • Standardval
  • Fungerar alltid
  • Läsningar från en del av en av tabellerna
  • Bucketar och sorterar på kopplingsnyckel
  • Skickar en bucket till varje reduce
  • Kopplingen görs på reduce-sidan
Ingen betydande Hive-inställning behövs Fungerar varje gång
Mappning
  • En tabell får plats i minnet
  • Läser en liten tabell i minneshashtabellen
  • Flöden genom en del av den stora filen
  • Ansluter varje post från hash-tabellen
  • Kopplingar sker enbart av mapparen
hive.auto.confvert.join=true Snabb, men begränsad
Sortera sammanfognings bucket Om båda tabellerna är:
  • Sorterade samma
  • Bucketed samma
  • Koppla till den sorterade/bucketade kolumnen
Varje process:
  • Läser en bucket från varje tabell
  • Bearbetar raden med det lägsta värdet
hive.auto.convert.sortmerge.join=true Effektiv

Körningsmotoroptimeringar

Ytterligare rekommendationer för att optimera Hive-körningsmotorn:

Inställning Rekommenderat HDInsight standard
hive.mapjoin.hybridgrace.hashtable True = säkrare, långsammare; false = snabbare falskt
tez.am.resource.memory.mb 4 GB övre gräns för de flesta Automatisk justering
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

Nästa steg