Ottimizzare le applicazioni Apache Spark in HDInsight
Questo articolo offre una panoramica delle strategie per ottimizzare le applicazioni Apache Spark in Azure HDInsight.
È possibile affrontare i seguenti scenari comuni
- Lo stesso processo Spark è più lento rispetto a prima nello stesso cluster HDInsight
- Il processo Spark è più lento nel cluster HDInsight rispetto all'ambiente locale o ad altri provider di servizi di terze parti
- Il processo Spark è più lento in un cluster HDI rispetto a un altro cluster HDI
Le prestazioni dei processi di Apache Spark sono influenzate da più fattori. Questi fattori di prestazioni includono:
- Modalità di archiviazione dei dati
- Configurazione del cluster
- Operazioni utilizzate durante l'elaborazione dei dati.
- Servizio yarn non integro
- Vincoli di memoria dovuti a executor di dimensioni non corrette e OutOfMemoryError
- Troppe attività o troppe attività
- L'asimmetria dei dati ha causato alcune attività pesanti o attività lente
- Attività più lente nei nodi non valido
- Passare all'interfaccia utente di Ambari:
- Controllare se gli avvisi di ResourceManager o NodeManager
- Controllare lo stato di ResourceManager e NodeManager in YARN > SUMMARY: All NodeManager should be in Started and only Active ResourceManager should be in Started (Tutto NodeManager deve essere avviato) e solo Active ResourceManager deve essere avviato
Controllare se l'interfaccia utente di Yarn è accessibile tramite
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
Controllare se sono presenti eccezioni o errori nell'accesso di ResourceManager
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
Per altre informazioni, vedere Problemi comuni di Yarn
Passare a RIEPILOGO YARN > dell'interfaccia utente > di Ambari, controllare LA MEMORIA DEL CLUSTER in ServiceMetrics
Controllare le metriche della coda yarn nei dettagli:
- Passare all'interfaccia utente di Yarn, controllare le metriche dell'utilità di pianificazione yarn tramite
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
- In alternativa, è possibile controllare le metriche dell'utilità di pianificazione yarn tramite l'API REST yarn. Ad esempio,
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler"
. Per ESP, è consigliabile usare l'utente amministratore di dominio.
- Calcolare le risorse totali per la nuova applicazione
- Tutte le risorse degli executor:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores
. Per altre informazioni, vedere la configurazione degli executor Spark - ApplicationMaster
- In modalità cluster usare
spark.driver.memory
espark.driver.cores
- In modalità client usare
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
espark.yarn.am.cores
- In modalità cluster usare
Nota
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Confrontare le nuove risorse totali dell'applicazione con le risorse disponibili yarn nella coda specificata
È necessario identificare i sintomi seguenti tramite l'interfaccia utente di Spark o l'interfaccia utente della cronologia Spark:
- Quale fase è lenta
- Sono total executor CPU v-core completamente utilizzati in Event-Timeline nella scheda Stage
- Se si usa spark sql, qual è il piano fisico nella scheda SQL
- Il DAG è troppo lungo in una fase
- Osservare le metriche delle attività (dimensioni di input, dimensioni di scrittura casuali, tempo GC) nella scheda Fase
Per altre informazioni, vedere Monitoraggio delle applicazioni Spark
Esistono molte ottimizzazioni che consentono di superare queste sfide, ad esempio la memorizzazione nella cache e l'asimmetria dei dati.
In ognuno degli articoli seguenti è possibile trovare informazioni su diversi aspetti dell'ottimizzazione spark.
- Ottimizzare l'archiviazione dei dati per Apache Spark
- Ottimizzare l'elaborazione dei dati per Apache Spark
- Ottimizzare l'utilizzo della memoria per Apache Spark
- Ottimizzare la configurazione del cluster HDInsight per Apache Spark
-
spark.sql.shuffle.paritions
è 200 per impostazione predefinita. È possibile modificare in base alle esigenze aziendali durante la sequenza casuale dei dati per join o aggregazioni. -
spark.sql.files.maxPartitionBytes
è 1G per impostazione predefinita in HDI. Numero massimo di byte da comprimere in una singola partizione durante la lettura dei file. Questa configurazione è valida solo quando si usano origini basate su file, ad esempio Parquet, JSON e ORC. - AQE in Spark 3.0. Vedere Esecuzione di query adattive