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.
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.
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:
- Benutzer: Zeigt einen Benutzerfehler an.
- System: Zeigt einen Systemfehler an.
- Nicht eindeutig: Könnte ein Benutzer- oder Systemfehler sein.
- 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.