Optimalizace aplikací Apache Spark ve službě HDInsight
Tento článek obsahuje přehled strategií pro optimalizaci aplikací Apache Spark ve službě Azure HDInsight.
Přehled
Můžete se setkat s následujícími běžnými scénáři.
- Stejná úloha Sparku je pomalejší než dříve ve stejném clusteru HDInsight.
- Úloha Sparku je v clusteru HDInsight pomalejší než místní nebo jiný poskytovatel služeb třetích stran.
- Úloha Sparku je pomalejší v jednom clusteru HDI než v jiném clusteru HDI.
Výkon úloh Apache Sparku závisí na několika faktorech. Mezi tyto faktory výkonu patří:
- Způsob ukládání dat
- Jak je cluster nakonfigurovaný
- Operace, které se používají při zpracování dat.
- Služba yarn, která není v pořádku
- Omezení paměti z důvodu nesprávné velikosti exekutorů a chyby OutOfMemoryError
- Příliš mnoho úkolů nebo příliš málo úkolů
- Nerovnoměrná distribuce dat způsobila několik náročných úloh nebo pomalých úloh.
- Pomalejší úlohy ve špatných uzlech
Krok 1: Kontrola, jestli je vaše služba YARN v pořádku
- Přejděte do uživatelského rozhraní Ambari:
- Kontrola, jestli upozornění ResourceManageru nebo NodeManageru
- V souhrnu YARN > zkontrolujte stav ResourceManager a NodeManager: Měl by být spuštěný jenom Active ResourceManager.
Zkontrolujte, jestli je uživatelské rozhraní Yarn přístupné prostřednictvím
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
Zkontrolujte, jestli se v přihlášení ResourceManageru nechybují nějaké výjimky nebo chyby.
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
Další informace o běžných problémech s Yarn
Krok 2: Porovnání novýchprostředkůch
Přejděte na Ambari UI > YARN > SUMMARY, zkontrolujte paměť clusteru v ServiceMetrics.
Podrobnosti najdete v metrikách fronty yarn:
- Přejděte do uživatelského rozhraní Yarn, projděte si metriky plánovače Yarn prostřednictvím
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
- Případně můžete zkontrolovat metriky plánovače yarn prostřednictvím rozhraní REST API Yarn. Například
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler"
. Pro ESP byste měli použít uživatele správce domény.
- Výpočet celkových prostředků pro novou aplikaci
- Všechny exekutory prostředky:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores
. Zobrazit další informace v konfiguraci exekutorů Sparku - ApplicationMaster
- V režimu clusteru používejte
spark.driver.memory
aspark.driver.cores
- V klientském režimu používejte
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
aspark.yarn.am.cores
- V režimu clusteru používejte
Poznámka:
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Porovnání celkových prostředků nové aplikace s dostupnými prostředky yarn v zadané frontě
Krok 3: Sledování aplikace Spark
Pomocí uživatelského rozhraní Sparku nebo uživatelského rozhraní historie Sparku musíme identifikovat následující příznaky:
- Která fáze je pomalá
- Jsou celkové využití procesorových jader procesoru na časové ose událostí na kartě Fáze plně využité.
- Pokud používáte Spark SQL, jaký je fyzický plán na kartě SQL?
- Ukazuje orientovaný acyklický graf příliš dlouhou dobu trvání jedné fáze?
- Sledování metrik úkolů (velikost vstupu, velikost náhodného zápisu, čas GC) na kartě Fáze
Další informace o monitorování aplikací Spark
Krok 4: Optimalizace aplikace Spark
Existuje mnoho optimalizací, které vám můžou pomoct tyto problémy překonat, jako je ukládání do mezipaměti a které umožňují nerovnoměrnou distribuci dat.
V každém z následujících článků najdete informace o různých aspektech optimalizace Sparku.
- Optimalizace úložiště dat pro Apache Spark
- Optimalizace zpracování dat pro Apache Spark
- Optimalizace využití paměti pro Apache Spark
- Optimalizace konfigurace clusteru HDInsight pro Apache Spark
Optimalizace oddílů Spark SQL
-
spark.sql.shuffle.partitions
ve výchozím nastavení je 200. Při náhodném prohazování dat pro spojení nebo agregace můžeme upravit obchodní potřeby. -
spark.sql.files.maxPartitionBytes
ve výchozím nastavení je v HDI 1G. Maximální počet bajtů, které se mají zabalit do jednoho oddílu při čtení souborů. Tato konfigurace je efektivní pouze při použití souborových zdrojů, jako jsou Parquet, JSON a ORC. - AQE ve Sparku 3.0. Zobrazení adaptivního spouštění dotazů