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ů