Richtlijnen voor het afstemmen van prestaties voor MapReduce in HDInsight en Azure Data Lake Storage Gen1

Vereisten

Parameters

Bij het uitvoeren van MapReduce-taken zijn dit de belangrijkste parameters die u kunt configureren om de prestaties op Data Lake Storage Gen1 te verbeteren:

Parameter Beschrijving
Mapreduce.map.memory.mb De hoeveelheid geheugen die aan elke mapper moet worden toegewezen.
Mapreduce.job.maps Het aantal toewijzingstaken per taak.
Mapreduce.reduce.memory.mb De hoeveelheid geheugen die aan elke reducer moet worden toegewezen.
Mapreduce.job.reduces Het aantal reductietaken per taak.

Mapreduce.map.memory / Mapreduce.reduce.memory

Pas dit aantal aan op basis van de hoeveelheid geheugen die nodig is voor de toewijzings- en/of reductietaak. U kunt de standaardwaarden van mapreduce.map.memory en mapreduce.reduce.memory in Ambari bekijken via de Yarn-configuratie. Ga in Ambari naar YARN en bekijk het tabblad Configuraties . Het YARN-geheugen wordt weergegeven.

Mapreduce.job.maps / Mapreduce.job.reduces

Hiermee bepaalt u het maximum aantal mappers of reducers dat moet worden gemaakt. Het aantal splitsingen bepaalt hoeveel mappers er worden gemaakt voor de MapReduce-taak. Daarom krijgt u mogelijk minder mappers dan u hebt aangevraagd als er minder splitsingen zijn dan het aantal aangevraagde mappers.

Hulp

Stap 1: Het aantal taken bepalen dat wordt uitgevoerd

MapReduce gebruikt standaard het hele cluster voor uw taak. U kunt minder van het cluster gebruiken door minder mappers te gebruiken dan er beschikbare containers zijn. In de richtlijnen in dit document wordt ervan uitgegaan dat uw toepassing de enige toepassing is die op uw cluster wordt uitgevoerd.

Stap 2: mapreduce.map.memory/mapreduce.reduce.memory instellen

De grootte van het geheugen voor toewijzings- en reductietaken is afhankelijk van uw specifieke taak. U kunt de geheugengrootte verkleinen als u de gelijktijdigheid wilt vergroten. Het aantal gelijktijdig uitgevoerde taken is afhankelijk van het aantal containers. Door de hoeveelheid geheugen per mapper of reducer te verminderen, kunnen er meer containers worden gemaakt, waardoor meer mappers of reducers gelijktijdig kunnen worden uitgevoerd. Als u de hoeveelheid geheugen te veel verlaagt, kan dit ertoe leiden dat sommige processen onvoldoende geheugen meer hebben. Als u een heap-fout krijgt bij het uitvoeren van uw taak, verhoogt u het geheugen per mapper of reducer. Houd er rekening mee dat het toevoegen van meer containers extra overhead toevoegt voor elke extra container, wat de prestaties mogelijk kan verslechteren. Een ander alternatief is om meer geheugen te krijgen met behulp van een cluster met hogere hoeveelheden geheugen of door het aantal knooppunten in uw cluster te verhogen. Meer geheugen zorgt ervoor dat er meer containers kunnen worden gebruikt, wat meer gelijktijdigheid betekent.

Stap 3: het totale YARN-geheugen bepalen

Als u mapreduce.job.maps/mapreduce.job.reduces wilt afstemmen, moet u rekening houden met de hoeveelheid totale YARN-geheugen die beschikbaar is voor gebruik. Deze informatie is beschikbaar in Ambari. Ga naar YARN en bekijk het tabblad Configuraties . Het YARN-geheugen wordt weergegeven in dit venster. Vermenigvuldig het YARN-geheugen met het aantal knooppunten in uw cluster om het totale YARN-geheugen op te halen.

Total YARN memory = nodes * YARN memory per node

Als u een leeg cluster gebruikt, kan het geheugen het totale YARN-geheugen voor uw cluster zijn. Als andere toepassingen geheugen gebruiken, kunt u ervoor kiezen om slechts een deel van het geheugen van uw cluster te gebruiken door het aantal mappers of reducers te verminderen tot het aantal containers dat u wilt gebruiken.

Stap 4: het aantal YARN-containers berekenen

YARN-containers bepalen de hoeveelheid gelijktijdigheid die beschikbaar is voor de taak. Neem het totale YARN-geheugen en deel dat door mapreduce.map.memory.

# of YARN containers = total YARN memory / mapreduce.map.memory

Stap 5: mapreduce.job.maps/mapreduce.job.reduces instellen

Stel mapreduce.job.maps/mapreduce.job.job.reduces in op ten minste het aantal beschikbare containers. U kunt verder experimenteren door het aantal mappers en reducers te verhogen om te zien of u betere prestaties krijgt. Houd er rekening mee dat meer mappers extra overhead hebben, zodat te veel mappers de prestaties kunnen verslechteren.

CPU-planning en CPU-isolatie zijn standaard uitgeschakeld, zodat het aantal YARN-containers wordt beperkt door het geheugen.

Voorbeeldberekening

Stel dat u momenteel een cluster hebt dat bestaat uit 8 D14-knooppunten en dat u een I/O-intensieve taak wilt uitvoeren. Dit zijn de berekeningen die u moet uitvoeren:

Stap 1: Het aantal taken bepalen dat wordt uitgevoerd

In ons voorbeeld gaan we ervan uit dat onze taak de enige is die wordt uitgevoerd.

Stap 2: mapreduce.map.memory/mapreduce.reduce.memory instellen

In ons voorbeeld voert u een I/O-intensieve taak uit en besluit u dat 3 GB geheugen voor toewijzingstaken voldoende is.

mapreduce.map.memory = 3GB

Stap 3: het totale YARN-geheugen bepalen

total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB

Stap 4: Het aantal YARN-containers berekenen

# of YARN containers = 768 GB of available memory / 3 GB of memory = 256

Stap 5: mapreduce.job.maps/mapreduce.job.reduces instellen

mapreduce.map.jobs = 256

Beperkingen

beperking van Data Lake Storage Gen1

Als service met meerdere tenants stelt Data Lake Storage Gen1 bandbreedtelimieten op accountniveau in. Als u deze limieten bereikt, ziet u taakfouten. Dit kan worden geïdentificeerd door beperkingsfouten in taaklogboeken te observeren. Neem contact met ons op als u meer bandbreedte nodig hebt voor uw werk.

Als u wilt controleren of u wordt beperkt, moet u de logboekregistratie voor foutopsporing aan de clientzijde inschakelen. U kunt dit als volgt doen:

  1. Plaats de volgende eigenschap in de log4j-eigenschappen in Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG

  2. Start alle knooppunten/service opnieuw op om de configuratie van kracht te laten worden.

  3. Als u wordt beperkt, ziet u de HTTP 429-foutcode in het YARN-logboekbestand. Het YARN-logboekbestand bevindt zich in /tmp/<user>/yarn.log

Uit te voeren voorbeelden

Om te laten zien hoe MapReduce wordt uitgevoerd op Data Lake Storage Gen1, volgt een voorbeeldcode die is uitgevoerd op een cluster met de volgende instellingen:

  • 16 knooppunten D14v2
  • Hadoop-cluster met HDI 3.6

Hier volgen enkele voorbeeldopdrachten voor het uitvoeren van MapReduce Teragen, Terasort en Teravalidate. U kunt deze opdrachten aanpassen op basis van uw resources.

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

Teravalidaat

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