Vägledning för prestandajustering för MapReduce på HDInsight och Azure Data Lake Storage Gen1
Förutsättningar
- Prenumeration för Azure. 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
- Granska riktlinjerna för prestandajustering för Data Lake Storage Gen1. Allmänna prestandabegrepp finns i Vägledning för prestandajustering för Data Lake Storage Gen1
Parameterar
När du kör MapReduce-jobb, här är de viktigaste parametrarna som du kan konfigurera för att öka prestanda på Data Lake Storage Gen1:
Parameter | Beskrivning |
---|---|
Mapreduce.map.memory.mb |
Mängden minne som ska allokeras till varje mappare. |
Mapreduce.job.maps |
Antalet mappningsuppgifter per jobb. |
Mapreduce.reduce.memory.mb |
Mängden minne som ska allokeras till varje reducer. |
Mapreduce.job.reduces |
Antalet reduceringsuppgifter 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-aktiviteten. Du kan visa standardvärdena för mapreduce.map.memory
och mapreduce.reduce.memory
i Ambari via Yarn-konfigurationen. I Ambari navigerar du till YARN och visar fliken Konfigurationer. YARN-minnet visas.
Mapreduce.job.maps/Mapreduce.job.reduces
Detta avgör det maximala antalet mappare eller reducers 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 mappare än du begärde om det finns färre delningar än det antal mappare 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 en mindre del 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 mappnings- och reduce-uppgifter beror på ditt specifika jobb. Du kan minska minnesstorleken om du vill öka samtidigheten. Antalet aktiviteter som körs samtidigt beror på antalet containrar. Genom att minska mängden minne per mappare eller reducer kan fler containrar skapas, vilket gör att fler mappare eller reducers 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, öka minnet per mappare eller reducer. Överväg att lägga till fler containrar ger extra omkostnader för varje ytterligare container, vilket potentiellt kan försämra prestanda. 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 hur mycket 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 endast använda en del av klustrets minne genom att minska antalet mappare eller reducers till det antal containrar som du vill använda.
Steg 4: Beräkna antalet YARN-containrar
YARN-kontainrar avgör hur mycket konkurrens 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 mappare och reducers för att se om du får bättre prestanda. Tänk på att fler mappare kommer att ha ytterligare omkostnader, 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.
Beräkningsexempel
Anta att du för närvarande har ett kluster som består av 8 D14-noder och att du vill köra ett I/O-intensivt jobb. Här är de beräkningar du bör göra:
Steg 1: Bestämma 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 kartuppgifter.
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 uppnår dessa gränser börjar du se funktionsfel. Detta kan identifieras genom att observera överbelastningsfel i uppdragsloggar. Kontakta oss om du behöver mer bandbredd för ditt jobb.
För att kontrollera om du blir begränsad måste du aktivera felsökningsloggningen på klientsidan. Så här gör du 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 blir strypt visas HTTP 429-felkoden i YARN-loggfilen. YARN-loggfilen finns i /tmp/<användare>/yarn.log
Exempel som ska köras
För att visa hur MapReduce körs på Data Lake Storage Gen1 är följande exempelkod som kördes på ett kluster med följande inställningar:
- 16 noder D14v2
- Hadoop-kluster som kör HDI 3.6
Här är 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