Pokyny k ladění výkonu pro MapReduce ve službě HDInsight a Azure Data Lake Storage Gen1
Požadavky
- Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.
- Účet Azure Data Lake Storage Gen1. Pokyny k jeho vytvoření najdete v tématu Začínáme s Azure Data Lake Storage Gen1.
- Cluster Azure HDInsight s přístupem k účtu Data Lake Storage Gen1. Viz Vytvoření clusteru HDInsight s Data Lake Storage Gen1. Ujistěte se, že jste pro cluster povolili Vzdálenou plochu.
- Použití MapReduce ve službě HDInsight. Další informace najdete v tématu Použití MapReduce v Hadoopu ve službě HDInsight.
- Projděte si pokyny k ladění výkonu pro Data Lake Storage Gen1. Obecné koncepty výkonu najdete v tématu Data Lake Storage Gen1 pokyny k ladění výkonu.
Parametry
Při spouštění úloh MapReduce jsou zde nejdůležitější parametry, které můžete nakonfigurovat ke zvýšení výkonu při Data Lake Storage Gen1:
Parametr | Popis |
---|---|
Mapreduce.map.memory.mb |
Množství paměti, které má být přiděleno každému mapovači. |
Mapreduce.job.maps |
Počet úkolů mapování na úlohu |
Mapreduce.reduce.memory.mb |
Množství paměti, které se má přidělit jednotlivým reduktorům. |
Mapreduce.job.reduces |
Počet úkolů redukce na úlohu |
Mapreduce.map.memory / Mapreduce.reduce.memory
Toto číslo upravte podle toho, kolik paměti je potřeba pro úkol mapování nebo redukce. Výchozí hodnoty mapreduce.map.memory
a mapreduce.reduce.memory
v Ambari můžete zobrazit prostřednictvím konfigurace Yarn. V Ambari přejděte na YARN a zobrazte kartu Konfigurace . Zobrazí se paměť YARN.
Mapreduce.job.maps / Mapreduce.job.reduces
Určuje maximální počet mapovačů nebo reduktorů, které se mají vytvořit. Počet rozdělení určuje, kolik mapovačů se pro úlohu MapReduce vytvoří. Proto můžete získat méně mapovačů, než jste požadovali, pokud existuje méně rozdělení, než je počet požadovaných mapovačů.
Pokyny
Krok 1: Určení počtu spuštěných úloh
Ve výchozím nastavení bude MapReduce pro vaši úlohu používat celý cluster. Můžete použít méně clusteru použitím méně mapovačů, než je k dispozici kontejnerů. Pokyny v tomto dokumentu předpokládají, že jediná aplikace spuštěná v clusteru je vaše aplikace.
Krok 2: Nastavení mapreduce.map.memory/mapreduce.reduce.memory
Velikost paměti pro úkoly mapování a redukce bude záviset na konkrétní úloze. Pokud chcete zvýšit souběžnost, můžete zmenšit velikost paměti. Počet souběžně spuštěných úloh závisí na počtu kontejnerů. Snížením množství paměti na mapovač nebo redukci je možné vytvořit více kontejnerů, které umožňují souběžné spuštění více mapovačů nebo reduktorů. Příliš velké snížení množství paměti může způsobit, že některým procesům dojde paměť. Pokud při spuštění úlohy dojde k chybě haldy, zvětšete paměť na mapovač nebo reduktor. Vezměte v úvahu, že přidání dalších kontejnerů zvyšuje režii každého dalšího kontejneru, což může potenciálně snížit výkon. Další alternativou je získat více paměti pomocí clusteru, který má větší množství paměti, nebo zvýšením počtu uzlů v clusteru. Větší paměť umožní použití více kontejnerů, což znamená větší souběžnost.
Krok 3: Určení celkové paměti YARN
Pokud chcete vyladit mapreduce.job.maps/mapreduce.job.reduces, zvažte celkovou velikost paměti YARN, která je k dispozici pro použití. Tyto informace jsou k dispozici v Ambari. Přejděte na YARN a prohlédněte si kartu Konfigurace . V tomto okně se zobrazí paměť YARN. Celkovou paměť YARN získáte vynásobením paměti YARN počtem uzlů v clusteru.
Total YARN memory = nodes * YARN memory per node
Pokud používáte prázdný cluster, může být celková paměť YARN pro váš cluster. Pokud paměť využívají jiné aplikace, můžete zvolit, že budete používat jenom část paměti clusteru tím, že snížíte počet mapovačů nebo reduktorů na požadovaný počet kontejnerů.
Krok 4: Výpočet počtu kontejnerů YARN
Kontejnery YARN určují míru souběžnosti, která je pro úlohu k dispozici. Vezměte celkovou paměť YARN a vydělte ji mapreduce.map.memory.
# of YARN containers = total YARN memory / mapreduce.map.memory
Krok 5: Nastavení mapreduce.job.maps/mapreduce.job.reduces
Nastavte mapreduce.job.maps/mapreduce.job.reduces alespoň na počet dostupných kontejnerů. Můžete dále experimentovat zvýšením počtu mapovačů a reduktorů, abyste zjistili, jestli získáte lepší výkon. Mějte na paměti, že více mapovačů bude mít další režii, takže příliš mnoho mapovačů může snížit výkon.
Plánování procesoru a izolace procesoru jsou ve výchozím nastavení vypnuté, takže počet kontejnerů YARN je omezený pamětí.
Příklad výpočtu
Řekněme, že aktuálně máte cluster složený z 8 uzlů D14 a chcete spustit úlohu náročnou na vstupně-výstupní operace. Tady jsou výpočty, které byste měli provést:
Krok 1: Určení počtu spuštěných úloh
V našem příkladu předpokládáme, že naše úloha je jediná spuštěná.
Krok 2: Nastavení mapreduce.map.memory/mapreduce.reduce.memory
V našem příkladu spouštíte úlohu náročnou na vstupně-výstupní operace a rozhodnete se, že pro úkoly mapování stačí 3 GB paměti.
mapreduce.map.memory = 3GB
Krok 3: Určení celkové paměti YARN
total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB
Krok 4: Výpočet počtu kontejnerů YARN
# of YARN containers = 768 GB of available memory / 3 GB of memory = 256
Krok 5: Nastavení mapreduce.job.maps/mapreduce.job.reduces
mapreduce.map.jobs = 256
Omezení
Data Lake Storage Gen1 omezování
Jako služba s více tenanty Data Lake Storage Gen1 nastavuje limity šířky pásma na úrovni účtu. Pokud dosáhnete těchto limitů, začnou se zobrazovat selhání úloh. To se dá zjistit podle chyb způsobených omezováním v protokolech úloh. Pokud pro svoji práci potřebujete větší šířku pásma, kontaktujte nás.
Pokud chcete zkontrolovat, jestli dochází k omezování, musíte povolit protokolování ladění na straně klienta. Tady je postup, jak to udělat:
Do vlastností log4j v rozšířené konfiguraci > Ambari > YARN > yarn-log4j vložte následující vlastnost: log4j.logger.com.microsoft.azure.datalake.store=DEBUG
Restartujte všechny uzly nebo službu, aby se konfigurace projevila.
Pokud dochází k omezování, v souboru protokolu YARN se zobrazí kód chyby HTTP 429. Soubor protokolu YARN je v /tmp/<user>/yarn.log
Příklady spuštění
Abychom ukázali, jak MapReduce běží na Data Lake Storage Gen1, níže je ukázkový kód, který byl spuštěn v clusteru s následujícím nastavením:
- 16 uzlů D14v2
- Cluster Hadoop se systémem HDI 3.6
Tady je několik ukázkových příkazů pro spuštění MapReduce Teragen, Terasort a Teravalidate. Tyto příkazy můžete upravit na základě vašich prostředků.
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