Sdílet prostřednictvím


Pokyny k ladění výkonu pro MapReduce ve službě HDInsight a Azure Data Lake Storage Gen1

Požadavky

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:

  1. 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

  2. Restartujte všechny uzly nebo službu, aby se konfigurace projevila.

  3. 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