Optimieren von Apache Spark-Anwendungen in HDInsigh
Dieser Artikel bietet eine Übersicht über die Strategien zur Optimierung der Apache Spark-Arbeitsplätze für Azure HDInsight.
Übersicht
Die folgenden häufigen Szenarien können auftreten
- Der gleiche Spark-Auftrag ist langsamer als zuvor im gleichen HDInsight-Cluster
- Der Spark-Auftrag ist im HDInsight-Cluster langsamer als lokal oder bei anderen Drittanbietern
- Der Spark-Auftrag ist in einem HDI-Cluster langsamer als ein anderer HDI-Cluster
Die Leistung Ihrer Apache Spark-Aufträge hängt von mehreren Faktoren ab. Diese Leistungsfaktoren umfassen:
- Wie Ihre Daten gespeichert sind
- Wie der Cluster konfiguriert ist
- Die Vorgänge, die beim Verarbeiten der Daten verwendet werden.
- Fehlerhafter Yarndienst
- Speichereinschränkungen aufgrund von nicht korrekt dimensionierten Executors und OutOfMemoryError
- Zu viele Aufgaben oder zu wenige Aufgaben
- Datenschiefe verursachte einige schwere Aufgaben oder langsame Aufgaben
- Aufgaben langsamer in schlechten Knoten
Schritt 1: Überprüfen, ob Ihr Yarn-Dienst fehlerfrei ist
- Wechseln Sie zur Ambari-Benutzeroberfläche:
- Überprüfen, ob ResourceManager oder NodeManager Warnungen ausgibt
- Überprüfen des Status "ResourceManager" und "NodeManager" in YARN > SUMMARY: Alle NodeManager sollten den Status "Gestartet" haben und nur der aktive ResourceManager sollte den Status "Gestartet" haben
Überprüfen, ob die Yarn-Benutzeroberfläche über
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
zugänglich istÜberprüfen, ob Ausnahmen oder Fehler im ResourceManager-Protokoll in
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
vorliegen
Weitere Informationen finden Sie unter Häufig auftretenden Problemen in Yarn
Schritt 2: Vergleichen Ihrer neuen Anwendungsressourcen mit verfügbaren Yarn-Ressourcen
Wechseln Sie zu Ambari Benutzeroberfläche > YARN > SUMMARY, überprüfen Sie CLUSTERSPEICHER in ServiceMetrics
Überprüfen Sie Yarn-Warteschlangenmetriken in Details:
- Wechseln Sie zur Yarn-Benutzeroberfläche, überprüfen Sie Yarn-Zeitplanmetriken über
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
- Alternativ können Sie Yarn-Zeitplanmetriken über yarn Rest-API überprüfen. Beispiel:
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler"
. Für ESP sollten Sie den Domänenadministratorbenutzer verwenden.
- Berechnen der Gesamtressourcen für Ihre neue Anwendung
- Alle Executorressourcen:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores
. Weitere Informationen finden Sie in Spark-Executorkonfiguration - ApplicationMaster
- Im Clustermodus verwenden Sie
spark.driver.memory
undspark.driver.cores
- Im Clientmodus verwenden Sie
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
undspark.yarn.am.cores
- Im Clustermodus verwenden Sie
Hinweis
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Vergleichen Sie Ihre neuen gesamten Anwendungsressourcen mit den verfügbaren yarn-Ressourcen in Ihrer angegebenen Warteschlange
Schritt 3: Nachverfolgen Ihrer Spark-Anwendung
Wir müssen die folgenden Symptome über Spark-Benutzeroberfläche oder Spark History-Benutzeroberfläche identifizieren:
- Welche Phase ist langsam
- Sind die gesamten CPU-V-Cores des Executors in der Ereigniszeitachse auf der Registerkarte Stage vollständig ausgelastet
- Wenn Sie Spark Sql verwenden, wie lautet der physische Plan auf der Registerkarte "SQL"
- Ist der gerichtete azyklische Graph zu lang in einer Phase
- Beobachten von Aufgabenmetriken (Eingabegröße, Schreibgröße, GC-Zeit) auf der Registerkarte Stage
Weitere Informationen finden Sie unter Monitoring der Spark-Anwendungen
Schritt 4: Optimieren Ihrer Spark-Anwendung
Es gibt zahlreiche Strategien, die Ihnen dabei helfen können, diese Herausforderungen zu meistern. Hierzu zählen beispielsweise das Zwischenspeichern und das Zulassen von Datenschiefe.
Die folgenden Artikel enthalten jeweils Informationen zu verschiedenen Aspekten der Spark-Optimierung:
- Optimieren der Datenspeicherung für Apache Spark
- Optimieren der Datenverarbeitung für Apache Spark
- Optimieren der Speicherauslastung für Apache Spark
- Optimierung der Clusterkonfiguration
Optimieren von Spark SQL-Partitionen
-
spark.sql.shuffle.paritions
ist standardmäßig 200. Die Daten können je nach den Geschäftsanforderungen angepasst werden, wenn sie für Verknüpfungen oder Aggregationen umgeschichtet werden. -
spark.sql.files.maxPartitionBytes
ist standardmäßig 1G in HDI. Die maximale Anzahl von Bytes, die beim Lesen von Dateien in eine einzelne Partition gepackt werden. Diese Konfiguration ist nur wirksam, wenn dateibasierte Quellen wie Parquet, JSON und ORC verwendet werden. - AQE in Spark 3.0. Siehe Ausführung von adaptiven Abfragen