Partager via


Interpréter les codes d’erreur dans Synapse Analytics

De nombreux facteurs peuvent expliquer pourquoi une application Spark échoue dans Azure Synapse Analytics aujourd’hui. Par exemple, cela peut être dû à une erreur système, voire à une erreur liée à l’utilisateur. Auparavant, toutes les erreurs correspondant à des travaux défaillants sur Synapse Analytics étaient exposées avec un code d’erreur générique LIVY_JOB_STATE_DEAD. Ce code d’erreur ne donnait pas d’autres informations sur la raison de l’échec du travail. Il fallait déployer des efforts considérables pour identifier la cause racine en fouillant dans les journaux du pilote, de l’exécuteur, des événements Spark et de Livy afin de trouver une solution.

Capture d’écran montrant un code d’erreur Apache Spark sans message détaillé.

Nous avons introduit une liste plus précise de codes d’erreur qui remplacent les messages génériques précédents. Le nouveau message décrit la cause de l’échec. Chaque fois qu’un travail échoue sur Azure Synapse Analytics, la fonctionnalité de gestion des erreurs analyse et vérifie les journaux sur le serveur principal pour identifier la cause racine. Elle affiche ensuite un message à l’utilisateur dans le volet de surveillance, ainsi que les étapes de résolution du problème.

Capture d’écran montrant un code d’erreur Apache Spark avec un message détaillé.

Activer la classification des erreurs dans Synapse

La fonctionnalité de classification des erreurs peut être activée ou désactivée en définissant la configuration Spark suivante sur true ou false au niveau du travail ou du pool :

livy.rsc.synapse.error-classification.enabled

La section suivante répertorie certains types d’erreurs actuellement prises en charge. Nous affinons et étoffons continuellement ces codes d’erreur en améliorant notre modèle.

Catégories de code d’erreur

Chaque code d’erreur se retrouve dans l’un des quatre compartiments suivants :

  1. User : indiquant une erreur utilisateur
  2. System : indiquant une erreur système
  3. Ambiguous : pourrait être une erreur utilisateur ou système
  4. Unknown : pas encore de classification, probablement parce que le type d’erreur n’est pas inclus dans le modèle

Exemples de code d’erreur pour chaque type de classification

Spark_User_TypeError_TypeNotIterable

Dans Python, l’erreur TypeError: argument of type 'insert type' is not iterable se produit lorsque l’opérateur d’appartenance (in, no in) est utilisé pour valider l’appartenance d’une valeur à des objets non itérables tels qu’une liste, un tuple, un dictionnaire. Cela est généralement dû à la recherche d’une valeur dans un objet non itérable. Solutions possibles :

  • Vérifiez si la valeur est présente dans l’objet itérable.
  • Si vous souhaitez vérifier une valeur par rapport à une autre, utilisez un opérateur logique au lieu de l’opérateur d’appartenance.
  • Si l’opérateur d’appartenance contient la valeur « None », il ne pourra pas itérer, et un contrôle de valeur null ou de valeur par défaut attribuée doit être effectué.
  • Vérifiez si le type de la valeur utilisée peut réellement être vérifié et s’il est correct.

Spark_System_ABFS_OperationFailed

Une opération avec ADLS Gen2 a échoué.

Cette erreur se produit généralement en raison d’un problème d’autorisations.

Assurez-vous que, pour toutes les ressources ADLS Gen2 référencées dans le travail Spark, le rôle RBAC « Contributeur aux données Blob du stockage » sur les comptes de stockage à partir desquels le travail est supposé lire et écrire. Vérifiez les journaux de cette application Spark. Accédez à votre Synapse Studio, puis sélectionnez l’onglet Moniteur dans le volet gauche. Dans la section Activités, sélectionnez Applications Apache Spark et recherchez votre travail Spark dans la liste. Pour le nom du compte de stockage ADLS Gen2 confronté à ce problème, inspectez les journaux disponibles sous l’onglet Journaux dans la partie inférieure de cette page.

Spark_Ambiguous_ClassLoader_NoClassDefFound

Une classe requise par le code n’a pas pu être trouvée lors de l’exécution du script.

Pour accéder à de la documentation sur la gestion des packages, reportez-vous aux pages suivantes  :

Pour les scénarios de notebook : Apache Spark gère les packages pour les travaux interactifs

Pour les scénarios de traitement par lot Spark (voir la section 6) : Apache Spark gère les packages pour les travaux par lots

Vérifiez que toutes les dépendances de code sont incluses dans les exécutions Synapse de fichiers JAR. Si vous n’incluez pas ou ne pouvez pas inclure de fichiers JAR tiers avec votre propre code, vérifiez que toutes les dépendances sont incluses dans les packages d’espace de travail du pool Spark sur lequel vous exécutez du code, ou qu’elles sont incluses dans la liste « Fichiers de référence » pour l’envoi de lots Spark. Pour plus d’informations, consultez la documentation ci-dessus.

Spark_Unknown_Unknown_java.lang.Exception

Un échec inconnu, le modèle n’a pas pu le classifier.

Les codes d’erreur (y compris et au-delà de la liste ci-dessus) ainsi que les instructions de résolution des problèmes s’affichent dans le volet d’erreurs de l’application Synapse Studio si cette fonctionnalité est activée.

Notes

Si vous avez créé des outils autour du travail de surveillance Synapse qui recherche un travail défaillant en filtrant le code d’erreur LIVY_JOB_STATE_DEAD, cela signifie que votre application ne fonctionne plus. Parce que les codes d’erreur renvoyés seraient différents comme mentionné ci-dessus, modifiez les scripts pour utiliser cette fonctionnalité ou désactivez-la si elle n’est pas nécessaire.