Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel bietet eine Übersicht über Strategien zur Optimierung von Apache Spark-Anwendungen auf Azure HDInsight.
Übersicht
Möglicherweise stehen Sie vor den unten aufgeführten häufigen Szenarien.
- 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 in einem 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.
- Ungesunder Yarn-Dienst
- 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 werden langsamer in schlechten Knoten
Schritt 1: Überprüfen, ob Ihr Yarn-Dienst in einem gesunden Zustand ist
- Wechseln Sie zur Ambari-Benutzeroberfläche:
- Überprüfen, ob ResourceManager oder NodeManager Warnungen ausgibt
- Überprüfen des Status „ResourceManager“ und „NodeManager“ in YARN > ZUSAMMENFASSUNG: 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/clusterzugänglich istÜberprüfen, ob Ausnahmen oder Fehler im ResourceManager-Protokoll in
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.logvorliegen
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 > ZUSAMMENFASSUNG, überprüfen Sie CLUSTERSPEICHER in ServiceMetrics
Überprüfen Sie YARN-Warteschlangenmetriken im Detail:
- 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.memoryundspark.driver.cores - Im Clientmodus verwenden Sie
spark.yarn.am.memory+spark.yarn.am.memoryOverheadundspark.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 die gesamten Ressourcen Ihrer neuen Anwendung mit den verfügbaren YARN-Ressourcen in Ihrer spezifizierten 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 DAG 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 Optimierungen, die Ihnen dabei helfen können, diese Herausforderungen zu meistern, wie zum Beispiel das Caching und das Zulassen von Datenverzerrungen.
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 HDInsight-Clusterkonfiguration für Apache Spark
Optimieren von Spark SQL-Partitionen
-
spark.sql.shuffle.partitionsist 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.maxPartitionBytesist 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