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
- En Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.
- Ett Data Lake Storage Gen1 konto. Anvisningar om hur du skapar en finns i Kom igång med Azure Data Lake Storage Gen1
- Azure HDInsight-kluster med åtkomst till ett Data Lake Storage Gen1-konto. Se Skapa ett HDInsight-kluster med Data Lake Storage Gen1. Se till att du aktiverar Fjärrskrivbord för klustret.
- Köra Hive på HDInsight. Mer information om hur du kör Hive-jobb i HDInsight finns i Använda Hive på HDInsight
- Riktlinjer för prestandajustering på Data Lake Storage Gen1. Allmänna prestandabegrepp finns i vägledningen för Data Lake Storage Gen1 prestandajustering
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:
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.
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:
- Optimera Hive-frågor för Hadoop i HDInsight
- Koda Hive-frågefilen i Azure HDInsight
- Ignite-samtal om att optimera Hive på HDInsight