使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

為什麼我的 AWS Glue 爬蟲程式會因內部服務例外而失敗?

2 分的閱讀內容
0

我的 AWS Glue 爬蟲程式失敗,並顯示錯誤「錯誤: 內部服務例外」。

解決方法

爬蟲程式內部服務例外可能是暫時性問題所造成。開始疑難排解之前,請再次執行爬蟲程式。如果您仍然收到內部服務例外,請檢查下列常見問題。

資料問題

如果您的 AWS Glue 爬蟲程式設定為處理大量資料,則爬蟲程式可能會遇到內部服務例外。檢閱要修復的資料出現問題的原因:

  • 如果您有大量的小檔案,爬蟲程式可能會失敗,並顯示內部服務例外。為避免此問題,請使用 S3DistCp 工具合併較小的檔案。使用 S3DISCp 時,會產生額外的 Amazon EMR 費用。或者,您可以設定排除模式並反複抓取檔案。最後,請考慮開啟取樣以避免掃描字首內的所有檔案。
  • 如果爬蟲程式接近 24 小時逾時值,請分割工作流程以避免記憶體問題。如需詳細資訊,請參閱為什麼 AWS Glue 爬蟲程式長時間執行?

注意: 解決資料大小問題的最佳方法是減少處理的資料量。

Amazon Simple Storage Service (Amazon S3) 資料夾結構不一致

一段時間後,您的 AWS Glue 爬蟲程式會以特定格式遇到資料。不過,上游應用程式中的不一致可能會觸發內部服務例外錯誤

資料目錄上的資料表分割區定義與 Amazon S3 中的 Hive 分割區結構之間可能存在不一致。這樣的差異可能會導致您的爬蟲程式出現問題。例如,爬蟲程式可能會預期將物件分割為「s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/dd=xx/[files]」。但是,假設某些物件位於「s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/[files]」下 。發生這種情況時,爬蟲程式會失敗,並擲回內部服務例外狀況錯誤。

如果您修改先前抓取的資料位置,則可能會發生內部服務例外狀況錯誤,其中包含累加抓取。發生這種情況是因為滿足以下條件之一:

  • 已知為空的 Amazon S3 位置會以資料檔案更新
  • 檔案會從已知已填入資料檔案的 Amazon S3 位置移除

如果您在 Amazon S3 字首結構中進行變更,則會觸發此例外狀況。

如果您認為 S3 資料存放區發生了變更,最佳做法是刪除目前的爬蟲程式。刪除目前的爬蟲程式之後,請使用抓取所有資料夾選項在相同 S3 目標上建立新的爬蟲程式。

AWS Key Management Service (KMS) 問題

如果您的資料存放區設定了 AWS KMS 加密,請檢查下列各項:

  • 確認爬蟲程式的 AWS 身份和存取管理 (IAM) 角色具有存取 AWS KMS 金鑰的必要權限。
  • 確認您的 AWS KMS 金鑰政策已正確委派權限。
  • 確認 AWS KMS 金鑰仍然存在,且處於可用狀態。如果 AWS KMS 金鑰等待刪除,則會觸發內部服務例外狀況。

如需詳細資訊,請參閱在 AWS Glue 主控台上使用安全組態在 AWS Glue 中設定加密

AWS Glue Data Catalog 問題

如果您的資料目錄具有大量欄或巢狀結構,則架構大小可能會超過 400 KB 的限制。若要解決與資料目錄相關的例外狀況,請檢查下列項目:

  • 確定欄名稱長度不超過 255 個字元,且不包含特殊字元。如需欄需求的詳細資訊,請參閱
  • 檢查長度為 0 的欄。如果來源資料中的欄與資料目錄表的資料格式不相符,就會發生這種情況。
  • 在資料表的架構定義中,請確定每個資料欄的 Type 值不超過 131,072 個位元組。如果超過此限制,您的爬蟲程式可能會面臨內部服務例外狀況。如需詳細資訊,請參閱欄架構
  • 檢查格式錯誤的資料。例如,如果資料行名稱不符合常規運算式模式 「[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]」,則爬蟲程式將無法運作。
  • 如果您的資料包含 (精確度、比例) 格式的 DECIMAL 欄,請確認比例值小於或等於精確度值。
  • 您的爬蟲程式可能會失敗,並顯示「無法在目錄中建立資料表」或「請求超出限制的裝載大小」錯誤訊息。發生這種情況時,請監控資料表架構定義的大小。資料目錄中資料表的欄數沒有限制。但是,架構總大小有 400 KB 的限制。大量的資料行會導致架構總大小超過 400 KB 限制。可能的因應措施包括將架構定義分解為多個資料表,以及移除不必要的資料欄。您也可以考量減少資料行名稱來減少中繼資料的大小。

Amazon S3 問題

  • 確定 Amazon S3 路徑不包含特殊字元。
  • 確認爬蟲程式的 IAM 角色具有存取 Amazon S3 路徑的權限。如需詳細資訊,請參閱為 AWS Glue 建立 IAM 角色
  • 盡可能從資料中移除特殊的 ASCII 字元,例如 ^、% 和 ~。或者使用自訂分類器來分類您的資料。
  • 確認 S3 物件使用 STANDARD 儲存類別。若要將物件還原至 STANDARD 儲存類別,請參閱還原封存物件
  • 確認爬蟲程式組態中的包含和排除模式與 S3 儲存貯體路徑相符。
  • 如果您要抓取加密的 S3 儲存貯體,請確認爬蟲程式的 IAM 角色具有 AWS KMS 金鑰的適當權限。如需詳細資訊,請參閱在 AWS Glue 主控台上使用安全組態在 AWS Glue 中設定加密
  • 如果您要抓取加密的 S3 儲存貯體,請確定儲存貯體、AWS KMS 金鑰和 AWS Glue 任務位於相同的 AWS 區域。
  • 檢查您正在抓取的 S3 儲存貯體上的請求率。如果請求率很高,請考慮建立更多的字首以並行化讀取。如需詳細資訊,請參閱最佳實務設計模式:最佳化 Amazon S3 效能
  • 確定 S3 資源路徑長度小於 700 個字元。

Amazon DynamoDB 問題

JDBC 問題

  • 如果您要抓取使用 AWS KMS 加密的 JDBC 資料來源,請檢查您用於連線的子網路。子網路的路由表必須具有通往 AWS KMS 端點的路由。此路由可透過 AWS KMS 支援的虛擬私有雲端 (VPC) 端點NAT 閘道進行。
  • 確定您使用的是正確的包含路徑語法。如需詳細資訊,請參閱定義爬蟲程式
  • 如果您要抓取 JDBC 資料存放區,請確認 SSL 連線設定正確。如果您未使用 SSL 連線,請確定在設定爬蟲程式時並未選取需要 SSL 連線
  • 確認 AWS Glue 連線中的資料庫名稱與爬蟲程式包含路徑中的資料庫名稱相符。此外,請務必正確輸入包含路徑。如需詳細資訊,請參閱包括和排除模式
  • 確定您使用的子網路位於 AWS Glue 支援的可用區域中。
  • 確定您使用的子網路具有足夠的可用私有 IP 地址。
  • 確認內建的 AWS Glue JDBC 驅動程式支援 JDBC 資料來源。

使用 VPC 端點時發生 AWS KMS 問題

  • 如果您使用的是 AWS KMS,則 AWS Glue 爬蟲程式必須能夠存取 AWS KMS。若要授予存取權,請在建立 AWS KMS 端點時選取啟用私有 DNS 名稱選項。然後,將 AWS KMS 端點新增至 AWS Glue 連線的 VPC 子網路組態。如需詳細資訊,請參閱透過 VPC 端點連線到 AWS KMS

相關資訊

在 AWS Glue 主控台上使用爬蟲程式

加密爬蟲程式、作業和開發端點寫入的資料

AWS 官方
AWS 官方已更新 2 年前