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íže běžnou situací
- 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í strany.
- Úloha Sparku je v jednom clusteru HDI pomalejší než jiný cluster HDI.
Výkon úloh Apache Sparku závisí na několika faktorech. Mezi tyto faktory výkonu patří:
- Jak se ukládají vaše data
- Způsob konfigurace clusteru
- Operace, které se používají při zpracování dat.
- Služba yarn, která není v pořádku
- Omezení paměti kvůli nesprávné velikosti exekutorů a chybě OutOfMemoryError
- Příliš mnoho úkolů nebo příliš málo úkolů
- Nerovnoměrná distribuce dat způsobila několik náročných nebo pomalých úloh.
- Pomalejší úkoly 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
- Zkontrolujte stav ResourceManager a NodeManager v části SOUHRN YARN > : Všechny služby NodeManager by měly být ve stavu Spuštěno a v části Spuštěno by měly být jenom aktivní ResourceManager.
Kontrola, jestli je uživatelské rozhraní Yarn přístupné prostřednictvím
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
Zkontrolujte, jestli v přihlášení Resource Manageru nedošlo k výjimkám nebo chybám.
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
Další informace najdete v tématu Běžné problémy s Yarn.
Krok 2: Porovnání nových prostředků aplikace s dostupnými prostředky yarn
Přejděte na SOUHRN YARN > uživatelského rozhraní > Ambari a zkontrolujte paměť clusteru v metrikách služby.
Podrobně zkontrolujte metriky fronty YARN:
- Přejděte do uživatelského rozhraní Yarn a projděte si metriky plánovače Yarn.
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
- Alternativně můžete zkontrolovat metriky plánovače yarn prostřednictvím rozhraní Yarn REST API. Například,
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler"
. Pro ESP byste měli použít uživatele s rolí správce domény.
- Výpočet celkového počtu prostředků pro novou aplikaci
- Všechny prostředky exekutorů:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores
. Další informace najdete v tématu Konfigurace exekutorů Sparku. - ApplicationMaster
- V režimu clusteru použijte
spark.driver.memory
aspark.driver.cores
- V režimu klienta použijte
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
aspark.yarn.am.cores
- V režimu clusteru použijte
Poznámka
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Porovnejte celkové prostředky nové aplikace s dostupnými prostředky yarn v zadané frontě.
Krok 3: Sledování aplikace Spark
Pomocí uživatelského rozhraní Sparku nebo historie Sparku musíme identifikovat následující příznaky:
- Která fáze je pomalá
- Plně využité virtuální jádra procesoru exekutoru v Event-Timeline na kartě Fáze
- Pokud používáte Spark sql, jaký je fyzický plán na kartě SQL?
- Je DAG příliš dlouhá v jedné fázi
- Sledování metrik úloh (velikost vstupu, velikost zápisu náhodného prohaze, čas uvolňování paměti) na kartě Fáze
Další informace najdete v tématu Monitorování aplikací Spark.
Krok 4: Optimalizace aplikace Spark
Existuje mnoho optimalizací, které vám můžou pomoct tyto problémy překonat, například ukládání do mezipaměti a umožnění nerovnoměrné distribuce 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.paritions
ve výchozím nastavení je 200. Při náhodném prohazování dat pro spojení nebo agregace můžeme provádět úpravy na základě obchodních potřeb. -
spark.sql.files.maxPartitionBytes
ve výchozím nastavení je v HDI 1G. Maximální počet bajtů, které se mají při čtení souborů sbalit do jednoho oddílu. Tato konfigurace je platná pouze při použití souborových zdrojů, jako jsou Parquet, JSON a ORC. - AQE ve Sparku 3.0. Viz Adaptivní spouštění dotazů.