Interpretieren von Fehlercodes in Synapse Analytics

Es gibt viele Faktoren, die beeinflussen können, warum eine Spark-Anwendung heutzutage in Azure Synapse Analytics fehlschlägt. Beispielsweise kann dies an einem Systemfehler oder sogar einem benutzerbezogenen Fehlers liegen. Bisher wurden alle Fehler, die dem Fehlschlagen von Aufträgen in Synapse Analytics entsprachen, mit einem generischen Fehlercode angezeigt: LIVY_JOB_STATE_DEAD. Dieser Fehlercode gewährte keinen weiteren Einblick in die Ursache für das Fehlschlagen des Auftrags. Es bedarf eines erheblichen Aufwands, um die Grundursache zu identifizieren, indem Sie den Treiber, Executor, Spark Event und Livy-Protokolle intensiv untersuchen und eine Lösung finden.

Screenshot des Apache Spark-Fehlercodes ohne detaillierte Meldung.

Wir haben eine genauere Liste der Fehlercodes eingeführt, die die vorherige generische Meldung ersetzt. Die neue Meldung beschreibt die Ursache des Fehlers. Wann immer ein Auftrag in Azure Synapse Analytics fehlschlägt, analysiert und überprüft die Fehlerbehandlungsfunktion die Protokolle im Back-End, um die Grundursache zu identifizieren. Anschließend wird dem Benutzer eine Meldung im Überwachungsbereich angezeigt, zusammen mit den Schritten zur Behebung des Problems.

Screenshot des Apache Spark-Fehlercodes mit detaillierter Meldung.

Aktivieren der Fehlerklassifizierung in Synapse

Die Fehlerklassifizierungsfunktion kann aktiviert oder deaktiviert werden, indem Sie die folgende Spark-Konfiguration auf true oder false auf Auftrags- oder Poolebene festlegen:

livy.rsc.synapse.error-classification.enabled

Im folgenden Abschnitt werden einige Fehlertypen aufgeführt, die derzeit unterstützt werden. Diese Fehlercodes werden kontinuierlich verfeinert und erweitert, indem wir unser Modell verbessern.

Fehlercodekategorien

Jeder Fehlercode fällt in einen der folgenden vier Buckets:

  1. Benutzer: Zeigt einen Benutzerfehler an.
  2. System: Zeigt einen Systemfehler an.
  3. Nicht eindeutig: Könnte ein Benutzer- oder Systemfehler sein.
  4. Unbekannt: Noch keine Klassifizierung. Höchstwahrscheinlich, weil der Fehlertyp nicht im Modell enthalten ist.

Fehlercodebeispiele für jeden Klassifizierungstyp

Spark_User_TypeError_TypeNotIterable

In Python tritt der Fehler TypeError: argument of type 'insert type' is not iterable auf, wenn der Mitgliedschaftsoperator (in, nicht in) verwendet wird, um die Mitgliedschaft eines Werts in nicht iterierbaren Objekten wie einer Liste, einem Tupel oder Wörterbuch zu überprüfen. Dies ist in der Regel auf die Suche eines Werts in einem nicht iterierbaren Objekt zurückzuführen. Mögliche Lösungen:

  • Überprüfen Sie, ob der Wert in dem iterierbaren Objekt vorhanden ist.
  • Wenn Sie einen Wert mit einem anderen vergleichen möchten, verwenden Sie einen logischen Operator anstelle des Mitgliedschaftsoperators.
  • Wenn der Mitgliedschaftsoperator den Wert „None“ (Keiner) enthält, kann er nicht iteriert werden, und es muss eine Nullprüfung erfolgen oder ein zugewiesener Standardwert verwendet werden.
  • Überprüfen Sie, ob der Typ des verwendeten Werts tatsächlich überprüft werden kann, und ob er richtig geschrieben ist.

Spark_System_ABFS_OperationFailed

Ein Vorgang mit ADLS Gen2 ist fehlgeschlagen.

Dieser Fehler tritt normalerweise wegen eines Berechtigungsproblems auf.

Stellen Sie sicher, dass alle ADLS Gen2-Ressourcen, auf die im Spark-Auftrag verwiesen wird, die RBAC-Rolle „Mitwirkender an Storage-Blobdaten“ für die Speicherkonten besitzen, aus denen der Auftrag lesen bzw. in die er schreiben soll. Überprüfen Sie die Protokolle für diese Spark-Anwendung. Navigieren Sie zu Ihrem Synapse Studio, und wählen Sie die Registerkarte Überwachen im linken Bereich aus. Wählen Sie im Abschnitt Aktivitäten die Option Apache Spark Applications aus, und suchen Sie ihren Spark-Auftrag in der Liste. Untersuchen Sie für den Namen des ADLS Gen2-Speicherkontos, das dieses Problem aufweist, die Protokolle auf der Registerkarte Protokolle unten auf dieser Seite.

Spark_Ambiguous_ClassLoader_NoClassDefFound

Eine für den Code erforderliche Klasse wurde bei Ausführung des Skripts nicht gefunden.

Bitte lesen Sie die folgenden Seiten der Paketverwaltungsdokumentation:

Für Notebook-Szenarien: Von Apache Spark verwaltete Pakete für interaktive Aufträge

Für Spark-Batchszenarien (siehe Abschnitt 6): Von Apache Spark verwaltete Pakete für Batchaufträge

Stellen Sie sicher, dass alle Codeabhängigkeiten in den von Synapse ausgeführten JAR-Dateien enthalten sind. Wenn Sie keine Drittanbieter-JARs in Ihren eigenen Code einschließen (können), stellen Sie sicher, dass alle Abhängigkeiten in den Arbeitsbereichspaketen für den Spark-Pool enthalten sind, auf dem Sie Code ausführen, oder dass sie in der Liste „Referenzdateien“ für die Spark-Batchübermittlung enthalten sind. Weitere Informationen finden Sie oben in der Dokumentation.

Spark_Unknown_Unknown_java.lang.Exception

Ein unbekannter Fehler, den das Modell nicht klassifizieren konnte.

Die Fehlercodes (einschließlich der oben gezeigten Liste und darüber hinaus) zusammen mit den Anleitungen zur Problembehandlung, wie das Problem behoben werden kann, werden im Synapse Studio-Anwendungsfehlerbereich angezeigt, wenn dieses Feature aktiviert ist.

Hinweis

Wenn Sie im Zusammenhang mit dem Synapse-Überwachungsauftrag Tools erstellt haben, die nach einem fehlschlagenden Auftrag suchen, indem sie auf den Fehlercode LIVY_JOB_STATE_DEAD filtern, würde Ihre App nicht mehr funktionieren. Der Grund ist, dass die zurückgegebenen Fehlercodes von den oben erwähnten abwichen. Ändern Sie alle Skripts entsprechend, um dieses Feature zu nutzen, oder deaktivieren Sie das Feature, wenn es nicht benötigt wird.