對 AWS Glue 中的藍圖錯誤進行故障診斷 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對 AWS Glue 中的藍圖錯誤進行故障診斷

如果在使用 AWS Glue 藍圖時遇到錯誤,請使用下列解決方案,以協助您找到問題來源並修復問題。

錯誤:缺少 PySpark 模組

AWS Glue 傳回錯誤「Unknown error executing layout generator function ModuleNotFoundError: No module named 'pyspark'」。

當您解壓縮藍圖封存時,它可能如下所示:

$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg inflating: compaction/layout.py inflating: compaction/README.md inflating: compaction/compaction.py $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg inflating: compaction.py inflating: layout.py inflating: README.md

在第一種情況下,與藍圖相關的所有檔案都放置在名為 compaction 的資料夾下,然後轉換成名為 compaction.zip

在第二種情況下,藍圖所需的所有檔案都未包含在資料夾中,並且做為根檔案新增到 zip 檔案 compaction.zip 中。

允許使用上述任一格式建立檔案。但是,請確認 blueprint.cfg 具有產生配置的指令碼中函數名稱的正確路徑。

範例

在案例 1:blueprint.cfg 應該具備 layoutGenerator,如下所示:

layoutGenerator": "compaction.layout.generate_layout"

在案例 2:blueprint.cfg 應該具備 layoutGenerator,如下所示

layoutGenerator": "layout.generate_layout"

如果未正確包含此路徑,您可能會看到指示的錯誤。例如,如果您具備案例 2 中所述的資料夾結構,而您的 layoutGenerator 表示為案例 1,則會看到上述錯誤。

錯誤:缺少藍圖組態檔

AWS Glue 傳回錯誤「Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: '/tmp/compaction/blueprint.cfg'」。

blueprint.cfg 應該放置在 ZIP 封存的根層級,或是位於與 ZIP 封存檔具有相同名稱的資料夾中。

當我們提取藍圖 ZIP 封存時,blueprint.cfg 預計可在以下路徑之一找到。如果在下列其中一個路徑中找不到它,您可以看到上述錯誤。

$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg

錯誤:缺少匯入的檔案

AWS Glue 傳回錯誤「Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory:* *'demo-project/foo.py'」。

如果您的配置產生指令碼具有讀取其他檔案的功能,請確保您為要導入的檔案提供了一個完整的路徑。例如,Conversion.py 指令碼可能會在 Layout.py 中參考。如需詳細資訊,請參閱範例藍圖專案

錯誤:未獲授權,不得在資源上執行 iamPassRole

AWS Glue 傳回錯誤「User: arn:aws:sts::123456789012:assumed-role/AWSGlueServiceRole/GlueSession is not authorized to perform: iam:PassRole on resource: arn:aws:iam::123456789012:role/AWSGlueServiceRole」

如果工作流程中的任務和爬蟲程式具有與從藍圖建立工作流程時傳遞的角色相同的角色,則藍圖角色需要包含 iam:PassRole 許可。

如果工作流程中的任務和爬蟲程式扮演了從藍圖建立工作流程實體的角色以外的角色,則藍圖角色需要包含藍圖角色以外其他角色的 iam:PassRole 許可。

如需詳細資訊,請參閱藍圖角色的許可

錯誤:無效的 cron 排程

AWS Glue 傳回錯誤「The schedule cron(0 0 * * * *) is invalid.」

請提供有效的 Cron 表達式。如需詳細資訊,請參閱任務和爬蟲程式的時間排程

錯誤:具有相同名稱的觸發已經存在

AWS Glue 傳回錯誤「Trigger with name 'foo_starting_trigger' already submitted with different configuration」。

藍圖不需要您在配置指令碼中定義觸發以建立工作流程。藍圖程式庫會根據兩個動作之間定義的相依性來管理觸發建立。

觸發的命名如下:

  • 對於工作流程中的啟動觸發,命名為 <workflow_name>_starting_trigger。

  • 對於工作流程中依賴於一個或多個上游節點完成的節點 (任務/爬蟲程式);AWS Glue 使用名稱 <workflow_name>_<node_name>_trigger 定義觸發

此錯誤表示具有相同名稱的觸發已經存在。您可以刪除現有的觸發,然後重新執行工作流程建立。

注意

刪除工作流程並不會刪除工作流程中的節點。雖然工作流程已刪除,但觸發仍會留下。因此,您可能不會收到「工作流程已經存在」錯誤,但在建立工作流程、刪除工作流程,然後嘗試從相同藍圖重新建立相同名稱的情況下,您可能會收到「觸發已經存在」錯誤。

錯誤:名稱為 foo 的工作流程已存在。

工作流程名稱應該是唯一的。請嘗試使用其他名稱。

錯誤:在指定的 layoutGenerator 路徑中找不到模組

AWS Glue 傳回錯誤「Unknown error executing layout generator function ModuleNotFoundError: No module named 'crawl_s3_locations」。

layoutGenerator": "crawl_s3_locations.layout.generate_layout"

例如,如果您有上述的 layoutGenerator 路徑,那麼當您解壓縮藍圖封存時,它需要如下所示:

$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip creating: crawl_s3_locations/ inflating: crawl_s3_locations/blueprint.cfg inflating: crawl_s3_locations/layout.py inflating: crawl_s3_locations/README.md

當您解壓縮歸檔時,如果藍圖歸檔如下所示,那麼您可能會得到上述錯誤。

$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip inflating: blueprint.cfg inflating: layout.py inflating: README.md

您可以看到沒有名為 crawl_s3_locations 的資料夾,而當 layoutGenerator 路徑透過模組 crawl_s3_locations 引用配置檔案,您就會得到上述錯誤。

錯誤:連線欄位中的驗證錯誤

AWS Glue 傳回錯誤「Unknown error executing layout generator function TypeError: Value ['foo'] for key Connections should be of type <class 'dict'>!」

這是驗證錯誤。Job 類別的 Connections 欄位應是字典,但卻提供了導致錯誤的值清單。

User input was list of values Connections= ['string'] Should be a dict like the following Connections*=*{'Connections': ['string']}

若要避免在從藍圖建立工作流程時發生這些執行時間錯誤,您可以驗證工作流程、任務和爬蟲程式定義,如測試藍圖所述。

請參閱 AWS Glue 藍圖類別參考中的語法,以在配置指令碼中定義 AWS Glue 任務、爬蟲程式和工作流程。