Pokyny k ladění výkonu pro Spark ve službě HDInsight a Azure Data Lake Storage Gen1
Při ladění výkonu Ve Sparku musíte vzít v úvahu počet aplikací, které budou spuštěné ve vašem clusteru. Ve výchozím nastavení můžete v clusteru HDI spouštět čtyři aplikace současně (poznámka: výchozí nastavení se může změnit). Můžete se rozhodnout používat méně aplikací, abyste mohli přepsat výchozí nastavení a použít pro tyto aplikace větší část clusteru.
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.
- Spuštění clusteru Spark na Data Lake Storage Gen1 Další informace najdete v tématu Použití clusteru HDInsight Spark k analýze dat v Data Lake Storage Gen1
- Pokyny pro 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 Sparku jsou nejdůležitější nastavení, která je možné vyladit za účelem zvýšení výkonu Data Lake Storage Gen1:
Num-executors – počet souběžných úloh, které je možné provést.
Executor-memory – množství paměti přidělené jednotlivým exekutorům.
Executor-cores – počet jader přidělených jednotlivým exekutorům.
Exekutory čísel Exekutory Num-executor nastaví maximální počet úloh, které můžou běžet paralelně. Skutečný počet úloh, které můžou běžet paralelně, je ohraničený prostředky paměti a procesoru, které jsou k dispozici v clusteru.
Exekutor-paměť Jedná se o velikost paměti, která se přiděluje jednotlivým exekutorům. Paměť potřebná pro každý exekutor závisí na úloze. Pro složité operace musí být paměť větší. U jednoduchých operací, jako je čtení a zápis, budou požadavky na paměť nižší. Velikost paměti pro jednotlivé exekutory se dá zobrazit v Ambari. V Ambari přejděte na Spark a zobrazte kartu Konfigurace .
Exekutor-jádra Tím se nastaví počet jader použitých na exekutor, který určuje počet paralelních vláken, která je možné spustit na exekutor. Pokud například executor-cores = 2, pak každý exekutor může v exekutoru spustit 2 paralelní úlohy. Potřebná jádra exekutoru budou záviset na úloze. Úlohy náročné na vstupně-výstupní operace nevyžadují velké množství paměti pro každou úlohu, takže každý exekutor může zpracovávat více paralelních úloh.
Při spuštění Sparku ve službě HDInsight jsou ve výchozím nastavení pro každé fyzické jádro definována dvě virtuální jádra YARN. Toto číslo poskytuje dobrou rovnováhu mezi souběžností a množstvím přepínání kontextu z více vláken.
Pokyny
Při spouštění analytických úloh Sparku pro práci s daty v Data Lake Storage Gen1 doporučujeme použít nejnovější verzi SLUŽBY HDInsight, abyste získali nejlepší výkon s Data Lake Storage Gen1. Pokud je vaše úloha náročnější na vstupně-výstupní operace, je možné nakonfigurovat určité parametry pro zvýšení výkonu. Data Lake Storage Gen1 je vysoce škálovatelná platforma úložiště, která zvládne vysokou propustnost. Pokud se úloha skládá hlavně ze čtení nebo zápisu, může zvýšení souběžnosti vstupně-výstupních operací do a z Data Lake Storage Gen1 zvýšit výkon.
Existuje několik obecných způsobů, jak zvýšit souběžnost úloh náročných na vstupně-výstupní operace.
Krok 1: Určení, kolik aplikací běží v clusteru – Měli byste vědět, kolik aplikací běží v clusteru, včetně té aktuální. Výchozí hodnoty pro každé nastavení Sparku předpokládají, že souběžně běží 4 aplikace. Proto budete mít pro každou aplikaci k dispozici pouze 25 % clusteru. Pokud chcete dosáhnout lepšího výkonu, můžete přepsat výchozí hodnoty změnou počtu exekutorů.
Krok 2: Nastavení executor-memory – první věc, kterou je potřeba nastavit, je exekutor-memory. Paměť bude záviset na úloze, kterou chcete spustit. Souběžnost můžete zvýšit přidělením menšího počtu paměti na exekutor. Pokud při spuštění úlohy dojde k výjimkám kvůli nedostatku paměti, měli byste hodnotu tohoto parametru zvýšit. Jednou z možností je získat více paměti pomocí clusteru, který má větší množství paměti, nebo zvětšením velikosti clusteru. Větší paměť umožní použití více exekutorů, což znamená větší souběžnost.
Krok 3: Nastavení jader exekutoru – U úloh náročných na vstupně-výstupní operace, které nemají složité operace, je dobré začít s velkým počtem exekutor-jader, abyste zvýšili počet paralelních úloh na exekutor. Dobrým začátkem je nastavení exekutor-cores na hodnotu 4.
executor-cores = 4
Zvýšení počtu exekutor-jader vám poskytne větší paralelismus, abyste mohli experimentovat s různými exekutory-jádry. U úloh, které mají složitější operace, byste měli snížit počet jader na exekutor. Pokud je hodnota exekutor-cores nastavená na hodnotu vyšší než 4, může být uvolňování paměti neefektivní a snížit výkon.
Krok 4: Určení velikosti paměti YARN v clusteru – Tyto informace jsou k dispozici v Ambari. Přejděte na YARN a prohlédněte si kartu Contigs. V tomto okně se zobrazí paměť YARN. Všimněte si, že v okně vidíte také výchozí velikost kontejneru YARN. Velikost kontejneru YARN je stejná jako parametr paměti na exekutor.
Celková paměť YARN = uzly × paměť YARN na uzel
Krok 5: Výpočet exekutorů s čísly
Výpočet omezení paměti – parametr num-executors je omezen pamětí nebo procesorem. Omezení paměti je určeno množstvím dostupné paměti YARN pro vaši aplikaci. Vezměte celkovou paměť YARN a vydělte ji exekutor-memory. Omezení musí být u počtu aplikací odstraněno, takže ho vydělíme počtem aplikací.
Omezení paměti = (celková paměť YARN / paměť exekutoru) / počet aplikací
Výpočet omezení procesoru – Omezení procesoru se vypočítá jako celkový počet virtuálních jader dělený počtem jader na exekutor. Pro každé fyzické jádro existují 2 virtuální jádra. Podobně jako u omezení paměti jsme vydělili počtem aplikací.
virtual cores = (uzly v clusteru * počet fyzických jader v uzlu * 2) Omezení procesoru = (celkový počet virtuálních jader / počet jader na exekutor) / počet aplikací
Set num-executors – parametr num-executors je určen převzetím minimálního omezení paměti a omezení procesoru.
num-executors = Min (celkový počet virtuálních jader / počet jader na exekutor, dostupná paměť YARN / exekutor-paměť) Nastavení vyššího počtu exekutorů nemusí nutně zvýšit výkon. Měli byste zvážit, že přidání dalších exekutorů zvýší další režii pro každý další exekutor, což může potenciálně snížit výkon. Exekutory Num-executor jsou ohraničené prostředky clusteru.
Příklad výpočtu
Řekněme, že aktuálně máte cluster složený z 8 uzlů D4v2, na kterém běží dvě aplikace včetně té, kterou chcete spustit.
Krok 1: Určete, kolik aplikací běží v clusteru – víte, že v clusteru máte dvě aplikace, včetně té, kterou chcete spustit.
Krok 2: Nastavení exekutor-memory – v tomto příkladu určíme, že pro úlohu náročné na vstupně-výstupní operace bude stačit 6 GB paměti exekutoru.
executor-memory = 6GB
Krok 3: Nastavení jader exekutoru – Vzhledem k tomu, že se jedná o úlohu náročnou na vstupně-výstupní operace, můžeme počet jader pro každý exekutor nastavit na čtyři. Nastavení počtu jader na exekutor na větší než čtyři může způsobit problémy s uvolňováním paměti.
executor-cores = 4
Krok 4: Určení velikosti paměti YARN v clusteru – Přejdeme do Ambari a zjistíme, že každý disk D4v2 má 25 GB paměti YARN. Vzhledem k tomu, že existuje 8 uzlů, je dostupná paměť YARN vynásobená hodnotou 8.
Celková paměť YARN = uzly * paměť YARN* na uzel Celkový počet paměti YARN = 8 uzlů × 25 GB = 200 GB
Krok 5: Výpočet num-executors – Parametr num-executors se určuje tak, že se vezme minimum omezení paměti a omezení procesoru dělené číslem aplikací spuštěných ve Sparku.
Výpočet omezení paměti – Omezení paměti se vypočítá jako celková paměť YARN dělená pamětí na exekutor.
Omezení paměti = (celková paměť YARN / paměť exekutoru) / počet aplikací Omezení paměti = (200 GB / 6 GB) / 2 Omezení paměti = 16 (zaokrouhleno) Výpočet omezení procesoru – Omezení procesoru se počítá jako celkový počet jader yarn dělený počtem jader na exekutor.
Jádra YARN = uzly v clusteru * počet jader na uzel * 2 jádra YARN = 8 uzlů × 8 jader na D14 × 2 = 128 procesorů = (celkový počet jader YARN / počet jader na exekutor) / počet omezení procesoru aplikací = (128 / 4) / 2 omezení procesoru = 16
Nastavení exekutorů čísel
num-executors = Min (memory constraint, CPU constraint) num-executors = Min (16, 16) num-executors = 16