Ottimizzare le applicazioni Apache Spark in HDInsight
Questo articolo offre una panoramica delle strategie per ottimizzare le applicazioni Apache Spark in Azure HDInsight.
Panoramica
È 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
Passaggio 1: Verificare se il servizio yarn è integro
- 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
Passaggio 2: Confrontare le nuove risorse dell'applicazione con le risorse disponibili 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
Passaggio 3: Tenere traccia dell'applicazione Spark
È 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
Passaggio 4: Ottimizzare l'applicazione 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
Ottimizzare le partizioni di Spark SQL
-
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