Freigeben über


Analysieren von Spark-Aufträgen mit Job Insight Library (Vorschau)

Auftragserblick ist eine javabasierte Diagnosebibliothek, die Ihnen bei der interaktiven Analyse abgeschlossener Spark-Anwendungen in Microsoft Fabric hilft. Mithilfe von Auftragserkenntnissen erhalten Sie tiefere Einblicke in Spark-Aufträge, indem Sie strukturierte Ausführungsdaten wie Abfragen, Aufträge, Phasen, Aufgaben und Executoren in Ihren Fabric Spark-Notizbüchern mithilfe von Scala abrufen.

Ganz gleich, ob Sie Leistungsprobleme beheben oder benutzerdefinierte Diagnosen durchführen, mit der Auftragserkenntnissebibliothek können Sie mit Spark-Telemetrie als systemeigene Spark-Datasets arbeiten, sodass Leistungsprobleme leichter behoben und Ausführungserkenntnisse untersucht werden können.

Hinweis

Der Zugriff auf die Auftragserblickbibliothek mit PySpark wird noch nicht unterstützt.

Voraussetzungen

  • Nur Scala wird unterstützt.

  • Erfordert Fabric Runtime 1.3 oder höher (mit Spark 3.5+).

  • PySpark unterstützt keinen Zugriff auf die Job Insight-Bibliothek.

Wichtige Funktionen

  • Interaktive Spark-Auftragsanalyse: Access Spark-Ausführungsmetriken, einschließlich Auftrags-, Phasen- und Executordetails.

  • Ausführungsmetriken speichern: Speichern Sie die Metriken der Spark-Job-Ausführung in Lakehouse-Tabellen für Berichterstellung und Integration.

  • Spark-Ereignisprotokollkopie: Exportieren von Ereignisprotokollen in OneLake oder Azure Data Storage.

Beispielnotizbuch

Sie können das bereitgestellte Beispielnotizbuch (Ipynb-Beispieldatei) verwenden, um zu beginnen. Das Notizbuch umfasst:

  • Beispiel analyze() und loadJobInsight() Code
  • Anzeigebefehle (z. B queries.show(). )
  • Beispiele zum Kopieren von Ereignisprotokollen.

Erste Schritte

1. Analysieren eines abgeschlossenen Spark-Auftrags

Extrahieren sie strukturierte Ausführungsdaten aus einem abgeschlossenen Spark-Auftrag mit der analyze API:

import com.microsoft.jobinsight.diagnostic.SparkDiagnostic
val jobInsight = SparkDiagnostic.analyze( 
    $workspaceId, 
    $artifactId, 
    $livyId, 
    $jobType, 
    $stateStorePath, 
     $attemptId 
) 
val queries = jobInsight.queries 
val jobs = jobInsight.jobs 
val stages = jobInsight.stages 
val tasks = jobInsight.tasks 
val executors = jobInsight.executors 

2. Speichern von Metriken und Protokollen in einem Seehaus

Speichern Sie die Analyseausgabe in Lakehouse-Tabellen für die Berichterstellung oder Integration:

val df = jobInsight.queries 
df.write 
.format("delta") 
.mode("overwrite") 
.saveAsTable("sparkdiagnostic_lh.Queries") 

Wenden Sie dieselbe Logik auf andere Komponenten wie Aufträge, Phasen oder Executoren an.

3. Vorherige Analyse erneut laden

Wenn Sie bereits eine Analyse ausgeführt und die Ausgabe gespeichert haben, laden Sie sie erneut, ohne den Vorgang zu wiederholen:

import com.microsoft.jobinsight.diagnostic.SparkDiagnostic 
val jobInsight = SparkDiagnostic.loadJobInsight( 
    $stateStorePath 
) 
val queries = jobInsight.queries 
val jobs = jobInsight.jobs 
val stages = jobInsight.stages 
val tasks = jobInsight.tasks 
val executors = jobInsight.executors

4. Kopieren von Spark-Ereignisprotokollen

Kopieren Sie Spark-Ereignisprotokolle mit dieser API an einen ABFSS-Speicherort (z. B. OneLake oder Azure Data Lake Storage (ADLS) Gen2:

import com.microsoft.jobinsight.diagnostic.LogUtils 
val contentLength = LogUtils.copyEventLog( 
    $workspaceId, 
    $artifactId, 
    $livyId, 
    $jobType, 
    $targetDirectory, 
    $asyncMode, 
    $attemptId 
)

Bewährte Methoden

Stellen Sie sicher, dass Sie über die richtigen Lese-/Schreibberechtigungen für alle ABFSS-Pfade verfügen.

  • Speichern Sie analyze() Ausgaben an einem dauerhaften Speicherort für die Wiederverwendung.

  • Wird asyncMode = true beim Kopieren von Protokollen für große Aufträge verwendet, um die Latenz zu reduzieren.

  • Überwachen der Größe und Struktur des Ereignisprotokolls, um Deserialisierungsprobleme zu vermeiden.

Problembehandlung

Thema Beschluss
Schreibzugriff verweigert Überprüfen Sie Schreibberechtigungen für das Ziel-ABFSS-Verzeichnis.
stateStorePath ist bereits vorhanden. Verwenden Sie einen neuen Pfad, der für jeden Aufruf zur Analyse() noch nicht vorhanden ist.