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.
- Om du vill ändra Hive-konfigurationsparametrar väljer du Hive i sidofältet Tjänster.
- 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:
På fliken Hive-konfigurationer skriver du körningsmotorn i filterrutan.
Optimeringsegenskapens standardvärde är Tez.
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).
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
ochtez.grouping.min-size
.Ange båda parametrarna till 33 554 432 byte (32 MB).
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.
Om du vill ändra parametern går du till fliken Hive-konfigurationer och letar reda på parametern Data per reducer på sidan Inställningar.
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.
Med en indatastorlek på 1 024 MB, med 128 MB data per reducer, finns det åtta reducers (1024/128).
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.
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.Ändra egenskapen om du vill begränsa antalet jobb som ska köras parallellt
hive.exec.parallel.thread.number
. Standardvärdet är 8.
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.
Om du vill aktivera en vektoriserad frågekörning går du till fliken Hive-konfigurationer och söker efter parametern
hive.vectorized.execution.enabled
. Standardvärdet är sant för Hive 0.13.0 eller senare.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".
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å.
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(*)
.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.
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.
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.
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".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.
Om du vill ange den mellanliggande komprimeringskodcen lägger du till den anpassade egenskapen
mapred.map.output.compression.codec
ihive-site.xml
filen ellermapred-site.xml
.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 ochorg.apache.hadoop.io.compress.SnappyCodec
som värde.d. Markera Lägga till.
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.
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".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.
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".
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.
För att Hive ska kunna göra dynamiska partitioner
hive.exec.dynamic.partition
ska parametervärdet vara sant (standardvärdet).Ä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.Ändra parametern om du vill begränsa antalet dynamiska partitioner som ska skapas
hive.exec.max.dynamic.partitions
. Standardvärdet är 5 000.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 .
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 .
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 |
|
|
Ingen betydande Hive-inställning behövs | Fungerar varje gång |
Mappning |
|
|
hive.auto.confvert.join=true |
Snabb, men begränsad |
Sortera sammanfognings bucket | Om båda tabellerna är:
|
Varje process:
|
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 |