引入生成式AI故障排除功能於AWS Glue中的Apache Spark(預覽)
組織每月運行數百萬個Apache Spark應用程序,以準備、移動和處理數據進行分析和機器學習(ML)。構建和維護這些Spark應用程序是一個反覆的過程,開發人員花費大量時間來測試和排除代碼中的問題。在開發過程中,數據工程師經常需要花幾個小時來篩選日誌文件、分析執行計劃以及進行配置更改以解決問題。由於Spark的分佈式特性、其內存處理模型以及可用的多種配置選項,這一過程在生產環境中變得更加挑戰。排除生產問題需要對日誌和指標進行廣泛分析,這常常導致長時間停機和關鍵數據管道的洞察延遲。
今天,我們很高興地宣布在AWS Glue中推出Apache Spark的生成式AI故障排除功能的預覽。這是一項新功能,使數據工程師和科學家能夠快速識別和解決其Spark應用程序中的問題。該功能使用機器學習和生成式AI技術,提供對失敗的Spark應用程序的自動根本原因分析,以及可行的建議和修復步驟。這篇文章展示了如何使用生成式AI故障排除來調試Spark應用程序。
生成式AI故障排除功能如何運作
對於Spark作業,故障排除功能分析與作業錯誤簽名相關的作業元數據、指標和日誌,以生成全面的根本原因分析。您可以通過在AWS Glue控制台上單擊一次來啟動故障排除和優化過程。這一功能可以將您的平均解決時間從幾天縮短到幾分鐘,優化您的Spark應用程序以提高成本和性能,並使您能夠更專注於從數據中獲取價值。
手動調試Spark應用程序對於數據工程師和ETL開發人員來說可能會遇到一些挑戰:
– Spark的廣泛連接和配置選項使其成為一個受歡迎的數據處理平台,但在配置不正確的情況下,尤其是與資源設置(如S3桶、數據庫、分區、解析列)和訪問權限(角色和密鑰)相關的問題,往往使得根本原因的識別變得困難。
– Spark的內存處理模型和數據集在其工作節點上的分佈雖然有利於並行處理,但經常使得用戶難以識別由於資源耗盡(如內存不足和磁碟異常)引起的故障的根本原因。
– Spark變換的延遲評估雖然有利於性能,但使得準確且快速地從不同執行器發出的分佈式日誌和指標中識別導致故障的應用程序代碼和邏輯變得困難。
接下來,我們將看看一些常見且複雜的Spark故障排除場景,生成式AI故障排除功能可以節省大量手動調試時間,幫助用戶深入分析並找到確切的根本原因。
資源設置或訪問錯誤
Spark應用程序允許從多種資源(如S3桶和數據目錄表中的數據集)整合數據,使用相關作業的IAM角色和KMS密鑰來正確訪問這些資源,並要求這些資源存在並可用於其標識符所引用的正確區域和位置。用戶可能會錯誤配置其應用程序,導致錯誤,這需要深入日誌以了解根本原因。
手動根本原因分析:失敗原因和Spark應用程序日誌
下面的示例顯示了生產作業運行中S3桶的常見設置問題的失敗原因。來自Spark的失敗原因無法幫助理解根本原因或需要檢查的代碼行。
“`
用戶類中的異常:org.apache.spark.SparkException : 作業因階段失敗而中止:階段0.0中的任務0失敗4次,最近的失敗:在階段0.0中丟失任務0.3(TID 3)(172.36.245.14執行器1):com.amazonaws.services.glue.util.NonFatalException:打開文件時出錯:
“`
經過深入分析許多分佈式Spark執行器的日誌後,顯然錯誤是由於S3桶不存在,但錯誤堆棧跟蹤通常很長且被截斷,難以了解精確的根本原因和Spark應用程序中需要修復的位置。
“`
引起:java.io.IOException:com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception:指定的桶不存在(服務:Amazon S3;狀態代碼:404;錯誤代碼:NoSuchBucket;請求ID:80MTEVF2RM7ZYAN9;S3擴展請求ID:AzRz5f/Amtcs/QatfTvDqU0vgSu5+v7zNIZwcjUn4um5iX3JzExd3a3BkAXGwn/5oYl7hOXRBeo=;代理:空),S3擴展請求ID:AzRz5f/Amtcs/QatfTvDqU0vgSu5+v7zNIZwcjUn4um5iX3JzExd3a3BkAXGwn/5oYl7hOXRBeo=
“`
使用生成式AI Spark故障排除:根本原因分析和建議
使用Spark故障排除,您只需單擊失敗作業運行的故障排除分析按鈕,該服務將分析您失敗作業的調試工件,以識別根本原因分析以及您可以檢查的Spark應用程序中的行號,以進一步解決問題。
Spark內存不足錯誤
讓我們看看一個常見但相對複雜的錯誤,這需要大量的手動分析才能得出結論,即Spark作業在Spark驅動程序(主節點)或分佈式Spark執行器之一上內存不足。通常,故障排除需要經驗豐富的數據工程師手動執行以下步驟以識別根本原因。
– 在Spark驅動程序日誌中搜索確切的錯誤消息
– 進入Spark UI以分析內存使用模式
– 審查執行器指標以了解內存壓力
– 分析代碼以識別內存密集型操作
這一過程通常需要數小時,因為Spark的失敗原因通常不難理解,即它是Spark驅動程序上的內存不足問題,以及修復它的補救措施。
手動根本原因分析:失敗原因和Spark應用程序日誌
以下示例顯示了錯誤的失敗原因。
“`
Py4JJavaError:調用o4138.collectToPython時發生錯誤。java.lang.StackOverflowError
“`
Spark驅動程序日誌需要廣泛搜索以找到確切的錯誤消息。在這種情況下,錯誤堆棧跟蹤由超過一百個函數調用組成,難以理解精確的根本原因,因為Spark應用程序突然終止。
“`
py4j.protocol.Py4JJavaError:調用o4138.collectToPython時發生錯誤。
: java.lang.StackOverflowError
at org.apache.spark.sql.catalyst.trees.TreeNode$$Lambda$1942/131413145.get$Lambda(未知來源)
at org.apache.spark.sql.catalyst.trees.TreeNode.$anonfun$mapChildren$1(TreeNode.scala:798)
…
“`
使用生成式AI Spark故障排除:根本原因分析和建議
使用Spark故障排除,您可以單擊失敗作業運行的故障排除分析按鈕,獲得詳細的根本原因分析,並檢查代碼的行號,同時還提供有關最佳實踐的建議,以優化您的Spark應用程序來修復問題。
Spark磁碟空間不足錯誤
另一種與Spark相關的複雜錯誤模式是當它在Spark應用程序的多個執行器之一上耗盡磁碟存儲時。與Spark的OOM異常類似,手動故障排除需要深入分析分佈式執行器日誌和指標,以了解根本原因並識別導致錯誤的應用程序邏輯或代碼,這是由於Spark對其變換的懶性執行。
手動根本原因分析:失敗原因和Spark應用程序日誌
相關的失敗原因和應用程序日誌中的錯誤堆棧跟蹤再次很長,要求用戶從Spark UI和Spark指標中收集更多見解,以識別根本原因並找到解決方案。
“`
調用o115.parquet時發生錯誤。設備上沒有剩餘空間
“`
“`
py4j.protocol.Py4JJavaError:調用o115.parquet時發生錯誤。
: org.apache.spark.SparkException:作業中止。
at org.apache.spark.sql.errors.QueryExecutionErrors$.jobAbortedError(QueryExecutionErrors.scala:638)
…
“`
使用生成式AI Spark故障排除:根本原因分析和建議
使用Spark故障排除,它提供了根本原因分析和代碼中數據洗牌操作懶性評估的行號。它還指向有關優化洗牌或寬變換的最佳實踐指南,或在AWS Glue上使用S3洗牌插件。
調試AWS Glue中的Spark作業
要使用此故障排除功能來處理失敗的作業運行,請完成以下步驟:
1. 在AWS Glue控制台上,選擇導航窗格中的ETL作業。
2. 選擇您的作業。
3. 在運行選項卡上,選擇您的失敗作業運行。
4. 選擇使用AI故障排除以開始分析。
您將被重定向到故障排除分析選項卡,生成的分析將顯示。您將看到根本原因分析和建議部分。
該服務分析您的作業的調試工件並提供結果。讓我們看看這在實踐中的真實示例。
考量
在預覽期間,該服務專注於常見的Spark錯誤,如資源設置和訪問問題、Spark驅動程序和執行器上的內存不足異常、Spark執行器上的磁碟空間不足異常,並會清楚指出尚不支持的錯誤類型。您的作業必須運行在AWS Glue版本4.0上。
預覽在所有AWS Glue可用的商業區域內免費提供。當您使用此功能時,您觸發的任何驗證運行以測試建議的解決方案將根據標準AWS Glue定價收費。
結論
這篇文章演示了生成式AI故障排除功能如何幫助您日常的Spark應用程序調試。它通過使用生成式AI自動識別故障的根本原因並提供可行的建議來簡化Spark應用程序的調試過程。
要了解有關此新故障排除功能的更多信息,請訪問使用AI故障排除Spark作業。
特別感謝所有參與Apache Spark在AWS Glue中生成式AI故障排除推出的人員。
關於作者
Noritaka Sekiyama是AWS Glue團隊的首席大數據架構師,負責構建幫助客戶的軟件工件。空閒時間,他喜歡騎自行車。
Vishal Kajjam是AWS Glue團隊的軟件開發工程師,熱衷於分佈式計算和使用ML/AI設計和構建端到端解決方案以滿足客戶的數據集成需求。空閒時間,他喜歡和家人朋友共度時光。
Shubham Mehta是AWS分析部門的高級產品經理,負責推動AWS Glue、Amazon EMR和Amazon MWAA等服務的生成式AI功能開發,利用AI/ML簡化和增強數據從業者在AWS上構建數據應用程序的體驗。
Wei Tang是AWS Glue團隊的軟件開發工程師,對使用分佈式系統和AI/ML解決客戶的重複性問題充滿熱情。
XiaoRun Yu是AWS Glue團隊的軟件開發工程師,負責為AWS Glue構建新特性以幫助客戶。工作之外,XiaoRun喜歡探索灣區的新地方。
Jake Zych是AWS Glue團隊的軟件開發工程師,對分佈式系統和機器學習有深入的興趣。在空閒時間,Jake喜歡創作視頻內容和玩桌遊。
Savio Dsouza是AWS Glue團隊的軟件開發經理,負責開發分佈式系統和數據集成的新接口,以高效管理AWS上的數據湖。
Mohit Saxena是AWS Glue團隊的高級軟件開發經理,專注於構建分佈式系統,使客戶能夠使用交互式和易於使用的界面高效管理和轉換Amazon S3上的PB級數據以及雲中的數據庫和數據倉庫。
以上文章由特價GPT API KEY所翻譯及撰寫。而圖片則由FLUX根據內容自動生成。