Vägledning för prestandajustering för MapReduce på HDInsight och Azure Data Lake Storage Gen1
Förutsättningar
- En Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.
- Ett Azure 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.
- Använda MapReduce på HDInsight. Mer information finns i Använda MapReduce i Hadoop på HDInsight
- Läs riktlinjerna för prestandajustering för Data Lake Storage Gen1. Allmänna prestandabegrepp finns i vägledningen för Data Lake Storage Gen1 prestandajustering
Parametrar
Här är de viktigaste parametrarna som du kan konfigurera för att öka prestanda för Data Lake Storage Gen1 när du kör MapReduce-jobb:
Parameter | Beskrivning |
---|---|
Mapreduce.map.memory.mb |
Mängden minne som ska allokeras till varje mappare. |
Mapreduce.job.maps |
Antalet map-uppgifter per jobb. |
Mapreduce.reduce.memory.mb |
Mängden minne som ska allokeras till varje reducering. |
Mapreduce.job.reduces |
Antalet reduce-uppgifter per jobb. |
Mapreduce.map.memory/Mapreduce.reduce.memory
Justera det här talet baserat på hur mycket minne som behövs för map- och/eller reduce-uppgiften. Du kan visa standardvärdena mapreduce.map.memory
för och mapreduce.reduce.memory
i Ambari via Yarn-konfigurationen. I Ambari går du till YARN och visar fliken Konfigurationer . YARN-minnet visas.
Mapreduce.job.maps/Mapreduce.job.reduces
Detta avgör det maximala antalet mappningar eller reduceringsfunktioner som ska skapas. Antalet delningar avgör hur många mappningar som skapas för MapReduce-jobbet. Därför kan du få färre mappningar än du begärde om det finns färre delningar än antalet mappningar som begärts.
Vägledning
Steg 1: Fastställa antalet jobb som körs
Som standard använder MapReduce hela klustret för jobbet. Du kan använda mindre av klustret genom att använda färre mappare än det finns tillgängliga containrar. Vägledningen i det här dokumentet förutsätter att ditt program är det enda programmet som körs i klustret.
Steg 2: Ange mapreduce.map.memory/mapreduce.reduce.memory
Storleken på minnet för map- och reduce-uppgifter beror på ditt specifika jobb. Du kan minska minnesstorleken om du vill öka samtidigheten. Antalet uppgifter som körs samtidigt beror på antalet containrar. Genom att minska mängden minne per mappare eller reducerare kan fler containrar skapas, vilket gör att fler mappare eller reducerare kan köras samtidigt. Om du minskar mängden minne för mycket kan vissa processer få slut på minne. Om du får ett heap-fel när du kör jobbet ökar du minnet per mappare eller reducerare. Överväg att lägga till fler containrar ger extra omkostnader för varje ytterligare container, vilket potentiellt kan försämra prestandan. Ett annat alternativ är att få mer minne genom att använda ett kluster som har högre mängder minne eller öka antalet noder i klustret. Mer minne gör att fler containrar kan användas, vilket innebär mer samtidighet.
Steg 3: Fastställa totalt YARN-minne
Om du vill finjustera mapreduce.job.maps/mapreduce.job.reduces bör du överväga mängden totalt YARN-minne som är tillgängligt för användning. Den här informationen är tillgänglig i Ambari. Gå till YARN och visa fliken Konfigurationer . YARN-minnet visas i det här fönstret. Multiplicera YARN-minnet med antalet noder i klustret för att få det totala YARN-minnet.
Total YARN memory = nodes * YARN memory per node
Om du använder ett tomt kluster kan minnet vara det totala YARN-minnet för klustret. Om andra program använder minne kan du välja att bara använda en del av klustrets minne genom att minska antalet mappare eller reducerare till det antal containrar som du vill använda.
Steg 4: Beräkna antalet YARN-containrar
YARN-containrar avgör hur mycket samtidighet som är tillgänglig för jobbet. Ta totalt YARN-minne och dividera det med mapreduce.map.memory.
# of YARN containers = total YARN memory / mapreduce.map.memory
Steg 5: Ange mapreduce.job.maps/mapreduce.job.reduces
Ange mapreduce.job.maps/mapreduce.job.reduces till minst antalet tillgängliga containrar. Du kan experimentera ytterligare genom att öka antalet mappningar och reduceringsfunktioner för att se om du får bättre prestanda. Tänk på att fler mappare kommer att ha ytterligare kostnader, så att ha för många mappare kan försämra prestandan.
Cpu-schemaläggning och CPU-isolering är inaktiverade som standard, så antalet YARN-containrar begränsas av minnet.
Exempelberäkning
Anta att du för närvarande har ett kluster som består av 8 D14-noder och du vill köra ett I/O-intensivt jobb. Här är de beräkningar som du bör göra:
Steg 1: Fastställa antalet jobb som körs
I vårt exempel antar vi att vårt jobb är det enda som körs.
Steg 2: Ange mapreduce.map.memory/mapreduce.reduce.memory
I vårt exempel kör du ett I/O-intensivt jobb och bestämmer dig för att det räcker med 3 GB minne för map-uppgifter.
mapreduce.map.memory = 3GB
Steg 3: Fastställa totalt YARN-minne
total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB
Steg 4: Beräkna antal YARN-containrar
# of YARN containers = 768 GB of available memory / 3 GB of memory = 256
Steg 5: Ange mapreduce.job.maps/mapreduce.job.reduces
mapreduce.map.jobs = 256
Begränsningar
Data Lake Storage Gen1 begränsning
Som en tjänst för flera innehavare anger Data Lake Storage Gen1 bandbreddsgränser på kontonivå. Om du når dessa gränser börjar du se aktivitetsfel. Detta kan identifieras genom att observera begränsningsfel i aktivitetsloggar. Kontakta oss om du behöver mer bandbredd 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 Ambari > YARN > Config > Advanced yarn-log4j: 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 får en begränsning visas HTTP 429-felkoden i YARN-loggfilen. YARN-loggfilen finns i /tmp/<user>/yarn.log
Exempel som ska köras
För att demonstrera hur MapReduce körs på Data Lake Storage Gen1 är följande exempelkod som kördes i ett kluster med följande inställningar:
- 16 nod D14v2
- Hadoop-kluster som kör HDI 3.6
Här följer några exempelkommandon för att köra MapReduce Teragen, Terasort och Teravalidate. Du kan justera dessa kommandon baserat på dina resurser.
Teragen
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 10000000000 adl://example/data/1TB-sort-input
Terasort
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 -Dmapreduce.job.reduces=512 -Dmapreduce.reduce.memory.mb=3072 adl://example/data/1TB-sort-input adl://example/data/1TB-sort-output
Teravalidate
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapreduce.job.maps=512 -Dmapreduce.map.memory.mb=3072 adl://example/data/1TB-sort-output adl://example/data/1TB-sort-validate