Dela via


Prestandajusteringsvägledning för Hive i HDInsight och Azure Data Lake Storage Gen1

Standardinställningarna har ställts in för att ge bra prestanda i många olika användningsfall. För I/O-intensiva frågor kan Hive finjusteras för att få bättre prestanda med Azure Data Lake Storage Gen1.

Förutsättningar

Parametrar

Här är de viktigaste inställningarna för att justera för bättre Data Lake Storage Gen1 prestanda:

  • hive.tez.container.size – mängden minne som används av varje uppgift

  • tez.grouping.min-size – minsta storlek för varje mappare

  • tez.grouping.max storlek – maximal storlek för varje mappare

  • hive.exec.reducer.bytes.per.reducer – storleken på varje reducerare

hive.tez.container.size – Containerstorleken avgör hur mycket minne som är tillgängligt för varje uppgift. Det här är huvudindata för att kontrollera samtidigheten i Hive.

tez.grouping.min-size – Med den här parametern kan du ange minsta storlek för varje mappare. Om antalet mappningar som Tez väljer är mindre än värdet för den här parametern använder Tez värdet som anges här.

tez.grouping.max storlek – Med parametern kan du ange den maximala storleken för varje mappare. Om antalet mappningar som Tez väljer är större än värdet för den här parametern använder Tez värdet som anges här.

hive.exec.reducer.bytes.per.reducer – Den här parametern anger storleken på varje reducerare. Som standard är varje reducering 256 MB.

Vägledning

Ange hive.exec.reducer.bytes.per.reducer – Standardvärdet fungerar bra när data är okomprimerade. För data som komprimeras bör du minska storleken på reduceraren.

Ange hive.tez.container.size – I varje nod anges minnet av yarn.nodemanager.resource.memory-mb och ska vara korrekt inställt på HDI-klustret som standard. Mer information om hur du ställer in lämpligt minne i YARN finns i det här inlägget.

I/O-intensiva arbetsbelastningar kan dra nytta av mer parallellitet genom att minska Tez-containerstorleken. Detta ger användaren fler containrar vilket ökar samtidigheten. Vissa Hive-frågor kräver dock en betydande mängd minne (t.ex. MapJoin). Om uppgiften inte har tillräckligt med minne får du ett undantag om slut på minne under körningen. Om du får undantag om slut på minne bör du öka minnet.

Det samtidiga antalet uppgifter som körs eller parallelliteten begränsas av det totala YARN-minnet. Antalet YARN-containrar avgör hur många samtidiga uppgifter som kan köras. Om du vill hitta YARN-minnet per nod kan du gå till Ambari. Gå till YARN och visa fliken Konfigurationer. YARN-minnet visas i det här fönstret.

Totalt YARN-minne = noder * YARN-minne per nod Antal YARN-containrar = Totalt YARN-minne/Tez-containerstorlek

Nyckeln till att förbättra prestanda med hjälp av Data Lake Storage Gen1 är att öka samtidigheten så mycket som möjligt. Tez beräknar automatiskt antalet aktiviteter som ska skapas så att du inte behöver ange det.

Exempelberäkning

Anta att du har ett D14-kluster med 8 noder.

Totalt YARN-minne = noder * YARN-minne per nod Totalt YARN-minne = 8 noder * 96 GB = 768 GB Antal YARN-containrar = 768 GB / 3072 MB = 256

Begränsningar

Data Lake Storage Gen1 begränsning

Om du når gränsen för bandbredden som tillhandahålls av Data Lake Storage Gen1 börjar du se aktivitetsfel. Detta kan identifieras genom att observera begränsningsfel i aktivitetsloggar. Du kan minska parallelliteten genom att öka Tez-containerstorleken. Kontakta oss om du behöver mer samtidighet för ditt jobb.

För att kontrollera om du får begränsningar måste du aktivera felsökningsloggningen på klientsidan. Så här kan du göra det:

  1. Placera följande egenskap i log4j-egenskaperna i Hive-konfigurationen. Detta kan göras från Ambari-vyn: log4j.logger.com.microsoft.azure.datalake.store=DEBUG Starta om alla noder/tjänst för att konfigurationen ska börja gälla.

  2. Om du begränsas visas HTTP 429-felkoden i Hive-loggfilen. Hive-loggfilen finns i /tmp/<user>/hive.log

Mer information om Hive-justering

Här är några bloggar som hjälper dig att finjustera dina Hive-frågor: