本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
故障診斷 PySpark 分析範本
使用 PySpark 分析範本執行任務時,您可能會在任務初始化或執行期間遇到失敗。這些失敗通常與指令碼組態、資料存取許可或環境設定相關。
如需 PySpark 限制的詳細資訊,請參閱 中的 PySpark 限制 AWS Clean Rooms。
對程式碼進行故障診斷
為了協助您開發和疑難排解程式碼,我們建議您啟用詳細的錯誤訊息,並使用自己的測試資料執行任務,在自己的程式碼 AWS Clean Rooms 中進行 AWS 帳戶 模擬。
您也可以透過下列步驟,在 Amazon EMR Serverless 中模擬 AWS Clean Rooms 中的 PySpark。它與 AWS Clean Rooms 中的 PySpark 會有些微差異,但主要涵蓋程式碼的執行方式。
在 EMR Serverless 中模擬 AWS Clean Rooms 中的 PySpark
-
在 Amazon S3 中建立資料集,將其編目在 中 AWS Glue Data Catalog,並設定 Lake Formation 許可。
-
使用自訂角色向 Lake Formation 註冊 S3 位置。
-
如果您還沒有 Amazon EMR Studio 執行個體,請建立執行個體 (需要 Amazon EMR Studio 才能使用 Amazon EMR Serverless)。
-
建立 EMR Serverless 應用程式
-
選取發行版本 emr-7.7.0。
-
選取 ARM64 架構。
-
選擇使用自訂設定。
-
停用預先初始化容量。
-
如果您打算執行互動式工作,請選取互動式端點 > 為 EMR Studio 啟用端點。
-
選取其他組態 > 使用 Lake Formation 進行精細存取控制。
-
建立應用程式。
-
-
透過 EMR-Studio 筆記本或
StartJobRun
API 使用 EMR-S。
分析範本任務未啟動
常見原因
由於三個主要組態問題,分析範本任務可能會在啟動時立即失敗:
-
不正確的指令碼命名不符合所需的格式
-
使用者指令碼中遺失或格式不正確的進入點函數
-
虛擬環境中不相容的 Python 版本
Resolution
若要解決問題:
-
驗證您的使用者指令碼:
-
檢查您的使用者指令碼是否具有有效的 Python 檔案名稱。
有效的 Python 檔案名稱使用小寫字母、底線分隔單字和 .py 副檔名。
-
-
驗證進入點函數。如果您的使用者指令碼沒有進入點函數,請新增一個。
-
開啟您的使用者指令碼。
-
新增此進入點函數:
def entrypoint(context): # Your analysis code here
-
確保函數名稱的拼寫與 完全相同
entrypoint
。 -
確認函數接受
context
參數。
-
-
檢查 Python 版本相容性:
-
驗證您的虛擬環境是否使用 Python 3.9。
-
若要檢查您的版本,請執行:
python --version
-
如有需要,請更新您的虛擬環境:
conda create -n analysis-env python=3.9 conda activate analysis-env
-
預防
-
使用提供的分析範本入門程式碼,其中包含正確的檔案結構。
-
使用 Python 3.9 為所有分析範本設定專用虛擬環境。
-
在提交任務之前,使用範本驗證工具在本機測試您的分析範本。
-
實作 CI/CD 檢查來驗證指令碼命名和進入點函數需求。
分析範本任務啟動,但在處理期間失敗
常見原因
基於下列安全性和格式原因,分析任務可能會在執行期間失敗:
-
對 Amazon S3 或 等 AWS 服務進行未經授權的直接存取嘗試 AWS Glue
-
以不符合所需 DataFrame 規格的不正確格式傳回輸出
-
由於執行環境中的安全限制而封鎖網路呼叫
Resolution
若要解決
-
移除直接 AWS 服務存取:
-
搜尋您的程式碼以取得直接 AWS 服務匯入和呼叫。
-
使用提供的 Spark 工作階段方法取代直接 S3 存取。
-
只能透過協作界面使用預先設定的資料表。
-
-
正確格式化輸出:
-
確認所有輸出都是 Spark DataFrames
-
更新您的傳回陳述式以符合此格式:
return { "results": { "output1": dataframe1 } }
-
移除任何非 DataFrame 傳回物件。
-
-
移除網路呼叫:
-
識別並移除任何外部 API 呼叫。
-
移除任何 urllib、請求或類似的網路程式庫。
-
移除任何通訊端連線或 HTTP 用戶端程式碼。
-
預防
-
使用提供的程式碼包來檢查未經授權的 AWS 匯入和網路呼叫。
-
在安全限制符合生產的開發環境中測試任務。
-
在部署任務之前,請遵循輸出結構描述驗證程序。
-
檢閱已核准服務存取模式的安全準則。
虛擬環境設定失敗
常見原因
虛擬環境組態失敗通常原因如下:
-
開發與執行環境之間的 CPU 架構不相符
-
防止適當環境初始化的 Python 程式碼格式化問題
-
容器設定中的基礎映像組態不正確
Resolution
若要解決
-
設定正確的架構:
-
使用 檢查您目前的架構
uname -m.
-
更新您的 Dockerfile 以指定 ARM64:
FROM --platform=linux/arm64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
-
使用 重建您的容器
docker build --platform=linux/arm64.
-
-
修正 Python 縮排:
-
在您的程式碼檔案
black
上執行 Python 程式碼格式化程式,如 。 -
驗證是否一致地使用空格或標籤 (非兩者)。
-
檢查所有程式碼區塊的縮排:
def my_function(): if condition: do_something() return result
-
使用 IDE 搭配 Python 縮排反白顯示。
-
-
驗證環境組態:
-
執行
python -m py_compile your_script.py
以檢查語法錯誤。 -
在部署之前在本機測試環境。
-
確認所有相依性都列在 中
requirements.txt
。
-
預防
-
使用 Visual Studio Code 或 PyCharm 搭配 Python 格式外掛程式
-
設定預先遞交掛鉤以自動執行程式碼格式化工具
-
使用提供的 ARM64 基礎映像在本機建置和測試環境
-
在 CI/CD 管道中實作自動化程式碼樣式檢查