解譯 Synapse Analytics 中的錯誤碼
有許多因素都可能是 Spark 應用程式目前在 Azure Synapse Analytics 中失敗的原因。 例如,可能是因為系統錯誤,或甚至是使用者相關的錯誤。 先前,與 Synapse Analytics 上失敗作業對應的所有錯誤都會呈現為一般錯誤碼,並顯示 LIVY_JOB_STATE_DEAD。 此錯誤碼無法進一步深入解析作業失敗的原因。 這需要大量努力,才能探究驅動程式、執行程式、Spark 事件、Livy 記錄來確認根本原因,並找出解決方法。
我們推出了更精確的錯誤碼清單,可取代先前的一般訊息。 新的訊息會描述失敗的原因。 每當作業在 Azure Synapse Analytics 失敗時,錯誤處理功能會剖析並檢查後端的記錄,以確認根本原因。 然後,其會在監視窗格中向使用者顯示訊息,並包含解決問題的步驟。
啟用 Synapse 中的錯誤分類
您可以將下列 Spark 組態設定為作業或集區層級的 true
或 false
,藉此啟用或停用錯誤分類功能:
livy.rsc.synapse.error-classification.enabled
下一節列出目前支援的一些錯誤類型。 我們會改善模型來持續精簡並新增更多錯誤類型至這些錯誤碼。
錯誤碼類別
每個錯誤碼都屬於下列四個貯體之一的範疇:
- 使用者 - 指出使用者錯誤
- 系統 - 指出系統錯誤
- 模棱兩可 - 可能是使用者或是系統錯誤
- 未知 - 尚未分類,最有可能是因為模型中並未包含錯誤類型
每個分類類型的錯誤碼範例
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
錯誤碼來檢查失敗的作業,則您的應用程式將無法再運作。 因為傳回的錯誤碼會與上述有所不同。 據以修改任何指令碼以利用此功能,或在不需要此功能時加以功能。