Richtlijnen voor het afstemmen van prestaties voor MapReduce in HDInsight en Azure Data Lake Storage Gen1
Vereisten
- Een Azure-abonnement. Zie Gratis proefversie van Azure ophalen.
- Een Azure Data Lake Storage Gen1-account. Zie Aan de slag met Azure Data Lake Storage Gen1 voor instructies over het maken van een account.
- Azure HDInsight-cluster met toegang tot een Data Lake Storage Gen1-account. Zie Een HDInsight-cluster maken met Data Lake Storage Gen1. Zorg ervoor dat u Extern bureaublad inschakelt voor het cluster.
- MapReduce gebruiken in HDInsight. Zie MapReduce gebruiken in Hadoop in HDInsight voor meer informatie
- Bekijk de richtlijnen voor het afstemmen van prestaties voor Data Lake Storage Gen1. Zie Data Lake Storage Gen1 Richtlijnen voor het afstemmen van prestaties voor algemene prestatieconcepten
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:
Plaats de volgende eigenschap in de log4j-eigenschappen in Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG
Start alle knooppunten/service opnieuw op om de configuratie van kracht te laten worden.
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