Interpretowanie kodów błędów w usłudze Synapse Analytics

Istnieje wiele czynników, które mogą odgrywać rolę, dlaczego aplikacja platformy Spark kończy się obecnie niepowodzeniem w usłudze Azure Synapse Analytics. Na przykład może to być spowodowane błędem systemu, a nawet błędem związanym z użytkownikiem. Wcześniej wszystkie błędy odpowiadające niepowodzeniom zadań w usłudze Synapse Analytics zostały wyświetlone z ogólnym kodem błędu wyświetlającym LIVY_JOB_STATE_DEAD. Ten kod błędu nie dał dodatkowego wglądu w przyczynę niepowodzenia zadania. Wymaga to znacznego wysiłku w celu zidentyfikowania głównej przyczyny przez przekopywanie sterownika, funkcji wykonawczej, zdarzenia platformy Spark, dzienników usługi Livy i znalezienie rozwiązania.

Zrzut ekranu przedstawiający kod błędu platformy Apache Spark bez szczegółowego komunikatu.

Wprowadziliśmy bardziej precyzyjną listę kodów błędów, które zastępują poprzedni komunikat ogólny. Nowy komunikat opisuje przyczynę niepowodzenia. Za każdym razem, gdy zadanie kończy się niepowodzeniem w usłudze Azure Synapse Analytics, funkcja obsługi błędów analizuje i sprawdza dzienniki w zapleczu, aby zidentyfikować główną przyczynę. Następnie zostanie wyświetlony komunikat dla użytkownika w okienku monitorowania wraz z krokami rozwiązywania problemu.

Zrzut ekranu przedstawiający kod błędu platformy Apache Spark ze szczegółowym komunikatem.

Włączanie klasyfikacji błędów w usłudze Synapse

Funkcję klasyfikacji błędów można włączyć lub wyłączyć, ustawiając następującą konfigurację platformy Spark na true lub false na poziomie zadania lub puli:

livy.rsc.synapse.error-classification.enabled

W poniższej sekcji wymieniono niektóre typy błędów, które są obecnie obsługiwane. Stale udoskonalamy i dodajemy więcej do tych kodów błędów, ulepszając nasz model.

Kategorie kodu błędu

Każdy kod błędu znajduje się w jednym z następujących czterech zasobników:

  1. Użytkownik — wskazuje błąd użytkownika
  2. System — wskazuje błąd systemowy
  3. Niejednoznaczne — może to być błąd użytkownika lub systemu
  4. Nieznany — nie ma jeszcze żadnej klasyfikacji, najprawdopodobniej dlatego, że typ błędu nie jest uwzględniony w modelu

Przykłady kodu błędu dla każdego typu klasyfikacji

Spark_User_TypeError_TypeNotIterable

W języku Python błąd TypeError: argument of type 'insert type' is not iterable występuje, gdy operator członkostwa (w, a nie w) jest używany do sprawdzania poprawności członkostwa wartości w obiektach innych niż iterowalne, takich jak lista, krotka, słownik. Jest to zwykle spowodowane wyszukiwaniem wartości w obiekcie, który nie jest iterowalny. Możliwe rozwiązania:

  • Sprawdź, czy wartość znajduje się w obiekcie iterowalnym.
  • Jeśli chcesz sprawdzić jedną wartość do innej, użyj operatora logicznego zamiast Operatora członkostwa.
  • Jeśli operator członkostwa zawiera wartość "Brak", nie będzie mógł iterować, a należy wykonać sprawdzanie wartości null lub przypisaną wartość domyślną.
  • Sprawdź, czy można sprawdzić typ użytej wartości, a wpisywanie jest poprawne.

Spark_System_ABFS_OperationFailed

Operacja z usługą ADLS Gen2 nie powiodła się.

Ten błąd występuje zazwyczaj z powodu problemu z uprawnieniami.

Upewnij się, że dla wszystkich zasobów usługi ADLS Gen2, do których odwołuje się zadanie spark, rola RBAC "Współautor danych obiektu blob usługi Storage" na kontach magazynu, z których oczekuje się odczytu i zapisu zadania. Sprawdź dzienniki dla tej aplikacji Spark. Przejdź do Synapse Studio, wybierz kartę Monitor w okienku po lewej stronie. W sekcji Działania wybierz pozycję Aplikacje platformy Apache Spark i znajdź zadanie platformy Spark z listy. W przypadku nazwy konta magazynu usługi ADLS Gen2, w której występuje ten problem, sprawdź dzienniki dostępne na karcie Dzienniki w dolnej części tej strony.

Spark_Ambiguous_ClassLoader_NoClassDefFound

Nie można odnaleźć klasy wymaganej przez kod podczas uruchamiania skryptu.

Aby uzyskać dokumentację zarządzania pakietami, zapoznaj się z następującymi stronami:

Scenariusze notesu: Platforma Apache Spark zarządza pakietami dla zadań interaktywnych

Scenariusze wsadowe platformy Spark (zobacz sekcję 6): Pakiety zarządzania platformą Apache Spark dla zadań wsadowych

Upewnij się, że wszystkie zależności kodu są uwzględnione w uruchomieniu usługi Synapse JARs. Jeśli nie dołączysz jednostek JAR innych firm do własnego kodu, upewnij się, że wszystkie zależności są uwzględnione w pakietach obszarów roboczych dla puli Spark, na której jest wykonywany kod, lub znajdują się w liście "Pliki referencyjne" dla przesyłania wsadowego platformy Spark. Aby uzyskać więcej informacji, zapoznaj się z powyższą dokumentacją.

Spark_Unknown_Unknown_java.lang.Exception

Nieznany błąd nie był w stanie sklasyfikować modelu.

Kody błędów (w tym poza listą pokazaną powyżej) wraz z instrukcjami rozwiązywania problemów dotyczącymi sposobu rozwiązania problemu będą wyświetlane w okienku błędów Synapse Studio aplikacji, jeśli ta funkcja jest włączona.

Uwaga

Jeśli utworzono jakiekolwiek narzędzia wokół zadania monitorowania usługi Synapse, które sprawdza, czy zadanie kończy się niepowodzeniem przez filtrowanie kodu błędu LIVY_JOB_STATE_DEAD , aplikacja nie będzie już działać. Ponieważ zwrócone kody błędów byłyby inne, jak wspomniano powyżej. Odpowiednio zmodyfikuj wszystkie skrypty, aby użyć tej funkcji lub wyłączyć tę funkcję, jeśli nie jest to konieczne.