Freigeben über


Optimieren von Apache Spark-Anwendungen in HDInsigh

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

  1. 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
  1. Überprüfen, ob die Yarn-Benutzeroberfläche über https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster zugänglich ist

  2. Ü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

  1. Wechseln Sie zu Ambari-Benutzeroberfläche > YARN > ZUSAMMENFASSUNG, überprüfen Sie CLUSTERSPEICHER in ServiceMetrics

  2. Ü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.
  1. 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 und spark.driver.cores
    • Im Clientmodus verwenden Sie spark.yarn.am.memory+spark.yarn.am.memoryOverhead und spark.yarn.am.cores

Hinweis

yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb

  1. Vergleichen Sie die gesamten Ressourcen Ihrer neuen Anwendung mit den verfügbaren YARN-Ressourcen in Ihrer spezifizierten Warteschlange.

Schritt 3: Nachverfolgen Ihrer Spark-Anwendung

  1. Überwachen Ihrer ausgeführten Spark-Anwendung über die Spark Benutzeroberfläche

  2. Überwachen Ihrer vollständigen oder unvollständigen Spark-Anwendung über Spark History Server-Benutzeroberfläche

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 von Spark SQL-Partitionen

  • spark.sql.shuffle.partitions 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

Nächste Schritte