Share via


解譯 Synapse Analytics 中的錯誤碼

有許多因素都可能是 Spark 應用程式目前在 Azure Synapse Analytics 中失敗的原因。 例如,可能是因為系統錯誤,或甚至是使用者相關的錯誤。 先前,與 Synapse Analytics 上失敗作業對應的所有錯誤都會呈現為一般錯誤碼,並顯示 LIVY_JOB_STATE_DEAD。 此錯誤碼無法進一步深入解析作業失敗的原因。 這需要大量努力,才能探究驅動程式、執行程式、Spark 事件、Livy 記錄來確認根本原因,並找出解決方法。

Screenshot of Apache Spark error code without detailed message.

我們推出了更精確的錯誤碼清單,可取代先前的一般訊息。 新的訊息會描述失敗的原因。 每當作業在 Azure Synapse Analytics 失敗時,錯誤處理功能會剖析並檢查後端的記錄,以確認根本原因。 然後,其會在監視窗格中向使用者顯示訊息,並包含解決問題的步驟。

Screenshot of Apache Spark error code with detailed message.

啟用 Synapse 中的錯誤分類

您可以將下列 Spark 組態設定為作業或集區層級的 truefalse,藉此啟用或停用錯誤分類功能:

livy.rsc.synapse.error-classification.enabled

下一節列出目前支援的一些錯誤類型。 我們會改善模型來持續精簡並新增更多錯誤類型至這些錯誤碼。

錯誤碼類別

每個錯誤碼都屬於下列四個貯體之一的範疇:

  1. 使用者 - 指出使用者錯誤
  2. 系統 - 指出系統錯誤
  3. 模棱兩可 - 可能是使用者或是系統錯誤
  4. 未知 - 尚未分類,最有可能是因為模型中並未包含錯誤類型

每個分類類型的錯誤碼範例

Spark_User_TypeError_TypeNotIterable

在 Python 中,當使用成員資格運算子 (in、not in) 來驗證不可反覆運算物件 (例如 list、tuple、dictionary) 中的值成員資格時發生 TypeError: argument of type 'insert type' is not iterable 錯誤。 這通常是因為搜尋不可反覆運算物件中的值所造成。 可能的解決方案:

  • 檢查值是否存在於可反覆運算的物件中。
  • 如果您想要逐一檢查每個值,請使用邏輯運算子,而不是成員資格運算子。
  • 如果成員資格運算子包含 "None" 值,就無法逐一查看,而且必須完成 Null 檢查或指派的預設值。
  • 檢查是否可實際檢查所使用值的類型,以及輸入是否正確。

Spark_System_ABFS_OperationFailed

ADLS Gen2 的作業失敗。

通常是由於權限問題而發生這個錯誤。

請確定 Spark 作業中參考的所有 ADLS Gen2 資源,在作業預期要讀取及寫入的儲存體帳戶上,具有「儲存體 Blob 資料參與者」RBAC 角色。 檢查此 Spark 應用程式的記錄。 瀏覽至您的 Synapse Studio,選取左窗格中的 [監視] 索引標籤。 從 [活動] 區段中,選取 [Apache Spark 應用程式],然後從清單中尋找您的 Spark 作業。 如需遇到此問題的 ADLS Gen2 儲存體帳戶名稱,請檢查此頁面底部 [記錄] 索引標籤中可用的記錄。

Spark_Ambiguous_ClassLoader_NoClassDefFound

執行指令碼時,找不到程式碼所要求的類別。

如需套件管理文件,請參閱下列頁面:

針對 Notebook 案例:Apache Spark 會管理互動式作業的套件

針對 Spark 批次案例 (請參閱第 6 節):Apache Spark 會管理批次工作的套件

確定所有程式碼相依性都包含在 JAR Synapse 執行中。 如果您並未或無法將協力廠商 JAR 包含在您自己的程式碼中,請確定所有相依性都包含在您執行程式碼的 Spark 集區工作區套件中,或包含在 Spark 批次提交的「參考檔案」清單中。 如需詳細資訊,請參閱上述文件。

Spark_Unknown_Unknown_java.lang.Exception

未知失敗,模型無法分類。

如果啟用此功能,則會在 Synapse Studio 應用程式錯誤窗格中顯示錯誤碼 (包括上述清單中的錯誤碼及上述清單以外的錯誤碼) 以及如何解決此問題的疑難排解指示。

注意

如果您建置了任何關於 Synapse 監視作業的工具,會篩選 LIVY_JOB_STATE_DEAD 錯誤碼來檢查失敗的作業,則您的應用程式將無法再運作。 因為傳回的錯誤碼會與上述有所不同。 據以修改任何指令碼以利用此功能,或在不需要此功能時加以功能。